我想知道.Net框架中大量密封类背后的动机是什么.密封课程有什么好处?我无法理解如何不允许继承有用,而且很可能不是唯一一个与这些类斗争的人.
那么,为什么框架以这种方式设计并且不会是开启一切的不间断的变化?必须有另一个原因,但只是邪恶?
Jon*_*eet 99
类应该设计为继承或禁止它.设计继承需要付出代价:
有效Java的第17项详细介绍了这一点 - 无论它是在Java的上下文中编写的,这个建议也适用于.NET.
我个人希望在.NET中默认密封类.
CVe*_*tex 41
本主题的MSDN文章是通过密封类限制可扩展性.
自从9年前提出这个问题以来,微软官方的密封指南似乎已经发生变化,并且他们从选择加入的理念(默认情况下的密封)转变为选择退出(默认情况下不密封):
X请勿在没有充分理由的情况下密封课程.
因为你无法想到可扩展性场景而封闭一个类并不是一个好理由.框架用户喜欢从各种非显而易见的原因继承类,比如添加便利成员.有关用户希望从类型继承的非显而易见原因的示例,请参阅未密封的类.
密封课程的充分理由包括:
- 该类是一个静态类.请参阅静态类设计.
- 该类在继承的受保护成员中存储安全敏感的机密.
- 该类继承了许多虚拟成员,并且单独密封它们的成本将超过使该类未密封的好处.
- 该类是一个需要非常快速运行时查找的属性.密封属性的性能水平略高于未密封的属性.请参阅属性.
X请勿在密封类型上声明受保护或虚拟成员.
根据定义,密封类型不能继承.这意味着无法调用密封类型上的受保护成员,并且无法覆盖密封类型上的虚方法.
✓考虑您覆盖的密封成员.引入虚拟成员可能导致的问题(在虚拟成员中讨论)也适用于覆盖,尽管程度稍低.从继承层次结构中的那一点开始,密封覆盖可以防止这些问题.
实际上,如果您搜索ASP.Net Core代码库,您将只发现大约30个sealed class,其中大多数是属性和测试类.
我认为不变性保护是支持密封的一个很好的论据.
| 归档时间: |
|
| 查看次数: |
26779 次 |
| 最近记录: |