C# 为什么委托类和多播委托类不被视为基类?

C# 为什么委托类和多播委托类不被视为基类?,c#,inheritance,delegates,C#,Inheritance,Delegates,当我继承Delegate或MulticastDelegate类时,我遇到了编译器错误,这两个类都是普通的抽象类,尽管我无法继承这些类的原因是什么 您能告诉我为什么这些类不被视为基类吗?因为它们是为CLR保留的特殊类 MulticastDelegate是一个特殊的类。编译器和其他工具可以 从该类派生,但不能显式从该类派生。这个 委托类也是如此 因为MulticastDelegate派生类的对象是不可变的非常重要。这确保了当您不知道的任意代码订阅事件处理程序时,状态不会被破坏。NET中的不变性是按

当我继承Delegate或MulticastDelegate类时,我遇到了编译器错误,这两个类都是普通的抽象类,尽管我无法继承这些类的原因是什么


您能告诉我为什么这些类不被视为基类吗?

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

MulticastDelegate是一个特殊的类。编译器和其他工具可以 从该类派生,但不能显式从该类派生。这个 委托类也是如此


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

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

因此,编译器有一个严格的规则,并拒绝您自己从多播代理派生的尝试。它保留权利,坚持它只能自己正确地完成,您必须使用delegate关键字。此外,它还会自动为Invoke()和BeginInvoke()方法创建适当的声明,这些声明迫使您以类型安全的方式使用这些方法

这不会减慢您的速度。

Dupe: