gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:56:29 28 4
gpt4 key购买 nike

当我继承 Delegate 或 MulticastDelegate 类时出现编译器错误,尽管我无法继承这些类,但它们都是普通的抽象类。

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

最佳答案

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

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

因此,编译器对此有严格的规定,并拒绝您自己从 MulticastDelegate 派生的尝试。它保留权利,坚持只能自己做,你必须使用delegate关键字。不仅如此,它还自动为 Invoke() 和 BeginInvoke() 方法创建正确的声明,这些声明强制您以类型安全的方式使用这些方法。

这不会减慢您的速度。

关于c# - 为什么 Delegate 和 MulticastDelegate 类不被视为基类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23980969/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com