我只是不明白为什么 IAsyncResult 是一个接口而不是简单的对象。我没记错,接口只包含没有实现的方法名称,所以我看不到它是如何在这里使用的,因为我没有派生它的任何类,也没有覆盖它的方法?我只是困惑..谢谢
问问题
325 次
3 回答
2
如果它只是一个对象,它可以是任何东西——并且你不能依赖某些存在的属性和/或方法,就像你知道你会得到一个实现接口的对象一样IAsyncResult
。
由于您要返回的对象必须实现有问题的接口,因此您可以依赖 properties 、 和AsyncState
将AsyncWaitHandle
存在的事实。CompletedSynchronously
IsCompleted
如果你只有一个对象并且你得到了一个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 回答