当我继承Delegate或MulticastDelegate类时,我收到编译器错误,两者都是正常的抽象类,即使我无法继承这些类。
请您告诉我为什么这些课程不被视为基类?
答案 0 :(得分:10)
因为MulticastDelegate派生类的对象不可变非常非常重要。这确保了当您不知道订阅事件处理程序的任意代码时,状态不会被破坏。 .NET中的不变性由约定实现,您将字段设为私有,不提供属性设置器,不提供默认构造函数。
这不是可以继承的特性,您可以为不可变的基类派生一个类并使其可变。并违反了不变性要求。
因此,编译器有一个关于它的硬烘焙规则,并拒绝您自己从MulticastDelegate派生的尝试。它保留了权利,坚持只能自己正确地执行,您必须使用委托关键字。而且,它会自动为Invoke()和BeginInvoke()方法创建适当的声明,这些声明会强制您以类型安全的方式使用这些方法。
这不会让你失望。
答案 1 :(得分:5)