0

我只是不明白为什么 IAsyncResult 是一个接口而不是简单的对象。我没记错,接口只包含没有实现的方法名称,所以我看不到它是如何在这里使用的,因为我没有派生它的任何类,也没有覆盖它的方法?我只是困惑..谢谢

4

3 回答 3

2

如果它只是一个对象,它可以是任何东西——并且你不能依赖某些存在的属性和/或方法,就像你知道你会得到一个实现接口的对象一样IAsyncResult

由于您要返回的对象必须实现有问题的接口,因此您可以依赖 properties 、 和AsyncStateAsyncWaitHandle存在的事实。CompletedSynchronouslyIsCompleted

如果你只有一个对象并且你得到了一个int- 你将如何获得你需要的那些属性?

于 2010-05-10T07:50:38.377 回答
1

像这样,结果可以是任何类型的对象,它实现了 IAsyncResult 接口。

你是对的,一个接口只包含没有实现的方法/属性。在这种情况下,保证 AsyncResult 对象包含“异步框架”所需的方法。

IAsyncResult 包含四个属性:

  • 异步状态(对象)
  • 异步等待句柄 (WaitHandle)
  • CompletedSynchronously(布尔值)
  • 已完成(布尔值)

在使用 Async 方法时,这些属性只是必需的。如果它是一个对象,我认为你会不那么灵活。

于 2010-05-10T06:12:40.770 回答
1

因为“ASyncResult”本身并不具体。

因为 C# 只允许单一继承,所以通过将其设为接口,您可以在您选择的任何对象类型上实现它。

例如,如果我的方法返回类型 Foo,我可以通过创建一个子类来为我的应用程序创建一个异步返回类型

FooAsync : Foo, IAsyncResult  

并简单地将其转换为与编写代码来提取值相反。

于 2010-05-10T08:01:21.967 回答