kof*_*fus 0 .net c# .net-core asp.net-core
为什么容器类在System.Collections.Immutable中,即ImmutableList<T>密封?
我想继承它们,并且必须经历一个丑陋且容易出错的组合+代理..
试着理解这里的原因?
Eri*_*ert 11
所有类型都应密封,除非它们是专门为扩展而精心设计的. 设计扩展是困难和昂贵的,容易做错.
此外:当您使用允许扩展的类型时,存在安全性和正确性含义.通过使类型密封,该类型的作者告诉消费者该类型"如果您收到此类型的实例,您可以依赖于您实际上获得由Microsoft编写的类型,由Microsoft测试,并有微软发布的源代码".您可以编写测试并确信运行时行为将与测试时间行为相匹配,因为没有其他人能够制作具有错误的疯狂扩展.
问题是倒退.你永远不应该要求一种类型的密封原因; 密封应该是该语言的默认值.相反,我们需要一个理由来开启一种类型:因为它是专为扩展而设计的,因为它是由专业人员实施的,他们仔细了解扩展的所有含义,并且因为该类型的消费者愿意承担不知道什么的风险他们调用的代码实际上是这样做的.
| 归档时间: |
|
| 查看次数: |
313 次 |
| 最近记录: |