0

IAsyncResultが単純なオブジェクトではなくインターフェイスである理由がわかりません。私が正しく覚えているように、インターフェースには実装なしのメソッド名のみが含まれているので、クラスを派生させたり、メソッドをオーバーライドしたりしないため、ここでどのように使用されているかわかりませんか?私はただ混乱しています..ありがとう

4

3 に答える 3

2

それが単なるオブジェクトである場合、それは何でもかまいません。インターフェイスを実装するオブジェクトを取得することがわかっている場合のように、存在する特定のプロパティやメソッドに依存することはできませんIAsyncResult

AsyncState返されるオブジェクトは問題のインターフェイスを実装している必要があるため、プロパティ、AsyncWaitHandleCompletedSynchronouslyおよびIsCompletedが存在するという事実に依存できます。

オブジェクトだけがあり、返された場合、int必要なプロパティをどのように取得しますか??

于 2010-05-10T07:50:38.377 に答える
1

「ASyncResult」自体は具体的なものではないためです。

C# では単一の継承しか許可されていないため、インターフェイスにすることで、選択した任意のオブジェクト タイプに実装できます。

たとえば、メソッドが Foo 型を返す場合、サブクラスを作成するだけで、アプリの非同期戻り型を作成できます。

FooAsync : Foo, IAsyncResult  

そして、コードを記述して値を抽出するのではなく、単純にキャストします。

于 2010-05-10T08:01:21.967 に答える
1

このように、結果は、IAsyncResult インターフェイスを実装する任意のタイプのオブジェクトにすることができます。

インターフェイスには、実装されていないメソッド/プロパティのみが含まれていることは間違いありません。この場合、AsyncResult オブジェクトに「Async-framework」が必要とするメソッドが含まれていることが保証されます。

IAsyncResult には、次の 4 つのプロパティが含まれています。

  • AsyncState (オブジェクト)
  • AsyncWaitHandle (待機ハンドル)
  • CompletedSynchronously (ブール値)
  • IsCompleted (ブール値)

これらのプロパティは、Async メソッドを操作するときに必要になるだけです。それがオブジェクトになると、柔軟性が低下すると思います。

于 2010-05-10T06:12:40.770 に答える