我在考虑MulticastDelegate和代表,我不明白为什么调用方法不是MulticastDelegate的抽象方法。有人知道吗?
发布于 2015-09-14 16:55:48
MulticastDelegate类型没有Invoke()方法(也没有BeginInvoke())。运行时在实际的delegate类型中自动提供这些方法。因此,“为什么MulticlassDelegate中的MulticlassDelegate方法没有标记为abstract”这个问题最明显的原因是没有这样的方法。
如果您在问为什么该方法不在MulticlassDelegate中(然后在那里标记了abstract ),那么我会问您:它怎么可能是?每个委托类型都需要自己的Invoke()方法,因为该方法的签名具体取决于委托类型的签名。任何基类都不能提供该类型。
最后,请注意,MulticlassDelegate类型是.NET中的几种“特殊”类型之一,并且明确要求用户代码继承而不是。不是它,也不是类型的任何声明的delegate子类。因为继承是不可能的,所以一个成员是否是abstract并不重要;即使是这样,它也不会对任何人有任何好处。
来自文献资料
委托类是委托类型的基类。但是,只有系统和编译器可以显式地从Delegate类或MulticastDelegate类派生。从委托类型派生新类型也是不允许的。委托类不被视为委托类型;它是用于派生委托类型的类。 大多数语言都实现了委托关键字,这些语言的编译器能够从MulticastDelegate类派生;因此,用户应该使用该语言提供的委托关键字。
公共语言运行库为每个委托类型提供一个调用方法,该方法具有与委托相同的签名。不必从C#、Visual或VisualC++显式调用此方法,因为编译器会自动调用该方法。当您希望找到委托类型的签名时,Invoke方法在反射中非常有用。
https://stackoverflow.com/questions/32555436
复制相似问题