开发者

Iasyncresult - why it is not just object, why it is interface?

开发者 https://www.devze.com 2022-12-29 13:52 出处:网络
I just cannot figure out what why IAsyncResult is an interface instead of simple object. As开发者_如何学编程 I remember correctly, interface contains only method names without implementation so I cano

I just cannot figure out what why IAsyncResult is an interface instead of simple object. As开发者_如何学编程 I remember correctly, interface contains only method names without implementation so I canot see how it is used here as I do not derive any class of it nor override its methods? I am just confused..Thanks


If it were just an object, it could be anything - and you could not rely on certain properties and/or methods being present, like you can when you know you'll get an object that implements the interface IAsyncResult.

Since the object you're getting back must be implementing the interface in question, you can rely on the fact that the properties AsyncState, AsyncWaitHandle, CompletedSynchronously and IsCompleted will be present.

If you had just an object and you got back an int - how would you get those properties you need??


Like this, the result can be any type of object, which implements the IAsyncResult interface.

You're right that an interface only contains methods/properties without implementation. In this case, it is garanteed that the AsyncResult object contains the methods which are needed by the 'Async-framework'.

The IAsyncResult contains four properties:

  • AsyncState (Object)
  • AsyncWaitHandle (WaitHandle)
  • CompletedSynchronously (Boolean)
  • IsCompleted (Boolean)

Those properties are simply required when working with Async methods. If it would be an object, you would be less flexible I think.


Because an "ASyncResult" in itself is nothing concrete.

Because C# only allows single inheretance, by making it an interface you can implement it on any object type you choose.

For example, if I my method returns type Foo, I can create an async return type for my app simply by creating a subclass saying

FooAsync : Foo, IAsyncResult  

And simply cast it as opposed writing code to extract values.

0

精彩评论

暂无评论...
验证码 换一张
取 消