当我继承委托或MulticastDelegate类时,我得到了编译器错误,这两个类都是普通的抽象类,即使我不能继承这些类。
你能告诉我为什么这些类不被认为是基类吗?
发布于 2014-06-01 23:12:21
因为MulticastDelegate的派生类的对象是不可变的,这一点非常非常重要。这确保了当您不知道的任意代码订阅事件处理程序时,状态不会被破坏。.NET中的不变性是通过约定实现的,您将字段设置为私有,不提供属性设置器,也不提供默认构造函数。
这不是一个可以继承的特性,您可以为一个不可变的基类派生一个类,并使其成为可变的。并且违反了不变性的要求。
因此,编译器有一个硬性的规则,拒绝您自己从MulticastDelegate派生的尝试。它保留权利,坚持它只能自己正确地完成它,你必须使用委托关键字。它会自动为Invoke()和BeginInvoke()方法创建适当的声明,强制您以类型安全的方式使用这些方法。
这不会减慢你的速度。
发布于 2014-06-01 22:40:16
因为它们是为CLR保留的特殊类。
MSDN Says:
MulticastDelegate是一个特殊的类。编译器和其他工具可以从该类派生,但不能显式派生。Delegate类也是如此。
https://stackoverflow.com/questions/23980969
复制相似问题