为什么BeginInvoke不返回AsyncResult类型的引用?

当您调用委托对象的BeginInvoke时,系统会创建AsyncResult类型的对象,但BeginInvoke会返回IAsyncResult类型的引用(指向AsyncResult实例)。 为什么BeginInvoke不返回AsyncResult类型的引用?

感谢名单

这是基于标准接口的编程 。

通过返回IAsyncResult,框架可以在以后随意更改内部实现,而不会破坏针对框架API编写的代码。 实质上,这告诉我们,作为开发人员,如果满足接口(IAsyncResult),我们不应该关心使用什么类型的实现。

相反,如果返回了实际的AsyncResult类,那么更改为其他类将破坏现有代码。

此外,这允许框架在多个位置使用相同的接口(IAsyncResult),无论AsyncResult类是否合适。 我个人已经利用了这一点,因为我已经创建了自己的异步函数,它返回由不同类支持的IAsyncResult,它存储了对我来说很重要的信息。 这允许我自己的代码像框架一样工作,而不会限制我对框架的实现。

因为它并不总是返回AsyncResult。 委托目标可以存在于另一个执行上下文中,RealProxy派生类可以为其实现代理。 远程处理就是一个例子。 返回接口类型使其透明。