System.Collections.Immutable容器,为什么要密封?

时间:2018-07-10 22:13:20

标签: c# .net asp.net-core .net-core

为什么System.Collections.Immutable中的容器类是密封的,即Lasso是密封的?

我想继承它们,并且必须经过丑陋且容易出错的组合物+代理..

只是想了解这里的原因?

1 个答案:

答案 0 :(得分:11)

所有类型均应密封,除非经过专门设计和精心设计以进行扩展。 设计扩展程序既困难又昂贵,而且容易出错。

此外:使用允许扩展的类型会涉及安全性和正确性。通过将类型密封,类型的作者告诉该类型的使用者“如果您收到该类型的实例,则可以依靠这样的事实,即您实际上得到了Microsoft编写,经过Microsoft测试的类型,并具有Microsoft发布的源代码”。您可以编写测试,并确信运行时行为将与测试时间行为相匹配,因为没有人能够进行自己的带有错误的疯狂扩展

问题是倒退。您永远不应该要求密封类型的原因。 密封应该是该语言的默认设置。相反,我们需要解开一个类型的原因:因为它是为扩展而设计的,因为它是由认真理解扩展的所有含义的专业人员实施的,并且因为该类型的消费者愿意承担不知道什么的风险他们正在调用的代码实际上是这样做的。