通过密封类限制扩展性

可以使用密封来限制开发人员可以扩展您的框架的方式。 如果密封了某个类,则其他类不能从该类继承。 如果密封了某个成员,则派生类不能重写该成员的实现。 默认情况下,不应密封类型和成员。 密封可防止对库的类型和成员进行自定义,也会影响某些开发人员对可用性的认识。 此外,使用面向对象的框架还有一个重要优点,即扩展性。 如果所作决定不能体现出这一优点,请仔细权衡。

除非有充分的理由,否则不要密封类。

不要因为预见不到需要扩展某个类的情形,就认为将其密封起来是合适的。 如果类满足如下条件,则应将其密封:

  • 类是静态类。

  • 类包含带有安全敏感信息的继承的受保护成员。

  • 类继承多个虚成员,并且密封每个成员的开发和测试开销明显大于密封整个类。

  • 类是一个要求使用反射进行快速搜索的特性。 密封特性可提高反射在检索特性时的性能。

不要在密封类型中声明受保护成员或虚成员。

如果类型是密封的,则它不能有派生类。 受保护成员只能从派生类进行访问,虚成员也只能在派生类中重写。

考虑密封重写的成员。

可以使用这种方式来确保派生类不会修改或跳过当前类和所有派生类所需的行为。

部分版权所有 2005 Microsoft Corporation。 保留所有权利。

部分版权所有 Addison-Wesley Corporation。 保留所有权利。

设计指引的详细信息,请参阅"框架设计准则: 公约、 成语和可重复使用的模式。网络图书馆"书 Krzysztof Cwalina 和布拉德 · 艾布拉姆斯,2005年艾迪生 - 韦斯利,发表。

请参见

概念

未密封类

其他资源

类库开发的设计准则

扩展性设计