C# 委托继承的方法解释

C# 委托继承的方法解释,c#,delegates,C#,Delegates,方法从何而来Invoke、Invoke、EndInvoke从何而来 我访问了MulticastDelegate和Delegate,它们不包含任何方法声明。当然,我知道这个方法的签名依赖于委托声明。但我不明白它是怎么工作的 这里呢 您创建的任何委托类型都具有从其父代继承的成员 类型,一个构造函数,参数为object和IntPtr,三个 额外方法:Invoke、BeginInvoke和EndInvoke。我们会回来的 一分钟后就可以找到构造函数了。这些方法无法从中继承 任何东西,因为签名随签名的不同

方法从何而来Invoke、Invoke、EndInvoke从何而来

我访问了MulticastDelegate和Delegate,它们不包含任何方法声明。当然,我知道这个方法的签名依赖于委托声明。但我不明白它是怎么工作的

这里呢

您创建的任何委托类型都具有从其父代继承的成员 类型,一个构造函数,参数为object和IntPtr,三个 额外方法:Invoke、BeginInvoke和EndInvoke。我们会回来的 一分钟后就可以找到构造函数了。这些方法无法从中继承 任何东西,因为签名随签名的不同而不同 委托是用声明的。使用上面的示例代码,第一个 委托具有以下方法

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

您创建的任何委托类型都具有从其父代继承的成员

但是

这些方法无法从中继承 任何事


请解释它是如何工作的。

代理是特殊类型,这句话可能意味着您不能手动继承
Delegate
MulticastDelegate
类,因为它们是特殊类。因此
C
编译器创建继承自
MulticastDelegate
的类型,并根据
Delegate
类型的签名声明这些方法自动地


或者,这可能意味着由于委托类型更改了这些方法的签名,因此它们不是继承的,而是由编译器根据委托的类型从头开始创建的。(重新阅读后,这更有意义).

当编译器处理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);
}