IAsyncResultが単純なオブジェクトではなくインターフェイスである理由がわかりません。私が正しく覚えているように、インターフェースには実装なしのメソッド名のみが含まれているので、クラスを派生させたり、メソッドをオーバーライドしたりしないため、ここでどのように使用されているかわかりませんか?私はただ混乱しています..ありがとう
3 に答える
それが単なるオブジェクトである場合、それは何でもかまいません。インターフェイスを実装するオブジェクトを取得することがわかっている場合のように、存在する特定のプロパティやメソッドに依存することはできませんIAsyncResult
。
AsyncState
返されるオブジェクトは問題のインターフェイスを実装している必要があるため、プロパティ、AsyncWaitHandle
、CompletedSynchronously
およびIsCompleted
が存在するという事実に依存できます。
オブジェクトだけがあり、返された場合、int
必要なプロパティをどのように取得しますか??
「ASyncResult」自体は具体的なものではないためです。
C# では単一の継承しか許可されていないため、インターフェイスにすることで、選択した任意のオブジェクト タイプに実装できます。
たとえば、メソッドが Foo 型を返す場合、サブクラスを作成するだけで、アプリの非同期戻り型を作成できます。
FooAsync : Foo, IAsyncResult
そして、コードを記述して値を抽出するのではなく、単純にキャストします。
このように、結果は、IAsyncResult インターフェイスを実装する任意のタイプのオブジェクトにすることができます。
インターフェイスには、実装されていないメソッド/プロパティのみが含まれていることは間違いありません。この場合、AsyncResult オブジェクトに「Async-framework」が必要とするメソッドが含まれていることが保証されます。
IAsyncResult には、次の 4 つのプロパティが含まれています。
- AsyncState (オブジェクト)
- AsyncWaitHandle (待機ハンドル)
- CompletedSynchronously (ブール値)
- IsCompleted (ブール値)
これらのプロパティは、Async メソッドを操作するときに必要になるだけです。それがオブジェクトになると、柔軟性が低下すると思います。