Iasyncresult - 为什么它不仅仅是对象,为什么它是接口?

时间:2010-05-10 05:56:37

标签: c# iasyncresult

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

3 个答案:

答案 0 :(得分:2)

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

由于您要返回的对象必须实现相关接口,因此您可以依赖属性AsyncStateAsyncWaitHandleCompletedSynchronously和{{1}这一事实将出席。

如果你只有一个物体并且你找回了IsCompleted - 你将如何得到你需要的那些属性?

答案 1 :(得分:1)

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

你是对的,接口只包含没有实现的方法/属性。 在这种情况下,可以保证AsyncResult对象包含'Async-framework'所需的方法。

IAsyncResult包含四个属性:

  • AsyncState(Object)
  • AsyncWaitHandle(WaitHandle)
  • CompletedSynchronously(布尔)
  • IsCompleted(布尔)

使用Async方法时,只需要这些属性。如果它是一个对象,我认为你的灵活性会降低。

答案 2 :(得分:1)

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

因为C#只允许单个固有,所以通过使它成为一个接口,你可以在你选择的任何对象类型上实现它。

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

FooAsync : Foo, IAsyncResult  

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