你可以通过密封成员的方式来限制开发者对你的库的扩展方式。在你密封一个类的时候,其他类就不能够从它那里继承。在你密封一个成员的时候,派生类就不能够重载该成员的实现。默认时你不应该密封任何类型和成员。密封可以防止针对于库类型和成员的定制,并且会影响一些开发者对于可用性的理解。另外,可扩展性是使用面向对象框架的一种基本利益。你应该不要随意地对这种利益进行约束。
不要在没有充足理由这样做的前提下密封一个类。
不要假设因为你不看扩展类将是合意的情节,那么它就是被适当密封的类。你应该为符合某些条件的类进行密封:
- 这个类是静态的。
- 这个类包含了被继承的并拥有安全敏感信息的被保护成员。
- 这个类继承了许多虚拟成员并且密封每个成员的开发代价和测试代价要比密封整个类要更加昂贵。
- 这个类是一个需要使用反射来进行快速搜索的特性。密封一个特性能够在获取特性的时候改进反射的性能。
不要在被密封的类型中声明被保护的成员或虚拟成员。
如果类型是被密封的,那么它就不能够拥有派生类。而被保护的成员只能够从派生类中被访问,并且虚拟成员也只能够在派生类中被重载。
考虑对重载成员进行密封。
你可以使用这种方式来确保派生类没有被更改或者为当前类和所有派生类而迂回所必需的行为。