其中方法BeginInvoke,Invoke,EndInvoke来自?
我去了MulticastDelegate和Delegate,它们不包含任何方法声明。当然我理解这种方法的签名取决于委托声明。但我无法理解它是如何运作的。
这里有关于它的John Skeet says:
您创建的任何委托类型都包含从其父级继承的成员 类型,一个带有object和IntPtr参数的构造函数和三个 额外的方法:Invoke,BeginInvoke和EndInvoke。我们会回来的 一分钟内的构造函数。这些方法不能继承 什么,因为签名根据签名而有所不同 委托声明。使用上面的示例代码,第一个 委托有以下方法
我不是母语为英语的人,我对这个事实感到有点困惑
您创建的任何委托类型都包含从其父
继承的成员
但是
不能继承这些方法 任何
请解释它是如何运作的。
答案 0 :(得分:0)
Delegates
是特殊类型,该句子可能意味着您不能手动从Delegate
或MulticastDelegate
类继承,因为它们是特殊类。所以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);
}