为什么Delegate和MulticastDelegate类不被视为基类?

use*_*930 6 c# inheritance delegates

当我继承Delegate或MulticastDelegate类时,我收到编译器错误,两者都是正常的抽象类,即使我无法继承这些类.

你能不能告诉我为什么这些课程不被视为基类?

Han*_*ant 10

因为MulticastDelegate的派生类的对象是不可变的非常非常重要.这确保当您不知道的任意代码订阅事件处理程序时,状态不会被破坏..NET中的不变性是通过约定实现的,您将字段设为私有,不提供属性设置器,不提供默认构造函数.

这不是可以继承的特性,您可以为不可变的基类派生一个类并使其可变.并违反了不变性要求.

所以编译器有一个关于它的硬烘焙规则并且拒绝你自己从MulticastDelegate派生的尝试.它保留了权利,坚持只能自己正确地执行它,你必须使用delegate关键字.而且,它会自动为Invoke()和BeginInvoke()方法创建适当的声明,这些声明会强制您以类型安全的方式使用这些方法.

这不会减慢你的速度.


qua*_*dev 5

因为它们是特殊类,为CLR保留

MSDN说:

MulticastDelegate是一个特殊类.编译器和其他工具可以从这个类派生,但你不能明确地从它派生.Delegate类也是如此.