首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C# MulticastDelegate和Invoke方法

C# MulticastDelegate和Invoke方法
EN

Stack Overflow用户
提问于 2015-09-13 23:14:47
回答 1查看 804关注 0票数 1

我在考虑MulticastDelegate和代表,我不明白为什么调用方法不是MulticastDelegate的抽象方法。有人知道吗?

EN

回答 1

Stack Overflow用户

发布于 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方法在反射中非常有用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32555436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档