委托继承方法说明

时间:2014-10-16 12:10:20

标签: c# delegates

其中方法BeginInvoke,Invoke,EndInvoke来自?

我去了MulticastDelegate和Delegate,它们不包含任何方法声明。当然我理解这种方法的签名取决于委托声明。但我无法理解它是如何运作的。

这里有关于它的John Skeet says

  

您创建的任何委托类型都包含从其父级继承的成员   类型,一个带有object和IntPtr参数的构造函数和三个   额外的方法:Invoke,BeginInvoke和EndInvoke。我们会回来的   一分钟内的构造函数。这些方法不能继承   什么,因为签名根据签名而有所不同   委托声明。使用上面的示例代码,第一个   委托有以下方法

我不是母语为英语的人,我对这个事实感到有点困惑

  

您创建的任何委托类型都包含从其父

继承的成员

但是

  

不能继承这些方法   任何

请解释它是如何运作的。

2 个答案:

答案 0 :(得分:0)

Delegates是特殊类型,该句子可能意味着您不能手动从DelegateMulticastDelegate类继承,因为它们是特殊类。所以C#编译器创建继承自MulticastDelegate的类型,并根据delegate类型的签名自动声明这些方法。

或者可能,这意味着由于委托类型更改了这些方法的签名,因此它们不会被继承,而是由编译器从头开始创建,具体取决于委托的类型。重读,这更有意义。)

答案 1 :(得分:0)

当编译器处理C#委托类型时,它自动生成从System.MulticastDelegate派生的密封类。

sealed class Add : System.MulticastDelegate
{
   public int Invoke(int x, int y);
   public IAsyncResult BeginInvoke(int x, int y, AsyncCallback cb, object state);
   public int EndInvoke(IAsyncResult result);
}

QuiteCode