为什么在System.Collections.Immutable容器类,即ImmutableList<T>
密封?
我想继承他们,必须要经过一个丑陋且容易出错的组成+代理..
只是想了解这里的原因是什么?
为什么在System.Collections.Immutable容器类,即ImmutableList<T>
密封?
我想继承他们,必须要经过一个丑陋且容易出错的组成+代理..
只是想了解这里的原因是什么?
所有类型应密封,除非它们是专门和精心的设计延伸。 设计用于扩展难,看病贵,容易做错事 。
此外: 有当您使用类型,允许扩展安全性和正确性的影响 。 通过使密封类型的作者是在告诉类型的消费者:“如果你收到此类型的实例的类型,你可以依靠的事实,你实际上得到的是被写了微软的类型,通过微软测试,并有由微软发布源代码”。 你可以写测试,并有信心,因为没有人能够作出自己的疯狂扩展,它有一个错误的运行时行为将匹配测试时间的行为。
现在的问题是倒退。 你不应该问的一个原因的类型被密封; 封本来应该在语言的默认 。 相反,我们需要一个理由来开封类型:因为它被设计为可扩展的,因为它是由谁仔细了解扩展的所有影响的专业人士实现,因为类型的消费者愿意承担不知道风险是什么他们实际上是调用代码完成。