即使没有明显的性能或安全问题,我是否应该密封所有我知道不应该用作基类的类,或者这只是增加了麻烦?
4 回答
一个可扩展的类实现了它可以扩展的特性——这个特性与该类的任何其他特性一样,应该被视为一个特性,与方法没有区别。应仔细考虑所有功能,以确保它们满足使用该功能的客户的目标。需要设计、实施、审查安全问题、调试、记录和维护功能。
所有这些都需要付出努力,而努力通常需要花钱。你花谁的钱?他们可能对您是否应该执行此功能有意见。
基本上,您有三个选择:
1)花钱做这个功能,这样你就有信心它是正确的、健壮的、安全的并满足用户的需求。
2) 不执行上述任何操作,但仍要发布该功能,并希望发布一个未经设计、快速实施、未经测试、未记录、未维护且具有未知安全风险的功能不会伤害您、您的雇主或您的客户。
3) 封类。如果您发现 (1) 是正确的选择,请稍后打开它。
我说(3)物有所值。我总是密封我写的每一个不是为可扩展性而设计的类。
将一个类设置sealed
为不是很麻烦,因为这样做会在您的代码中设置一个严格的规则:这个类不能被继承。
只有在不必要且令人困惑的情况下,代码才会变得粗糙。
也就是说,一种思想流派(以及简单的经验法则)是您应该始终密封所有课程,因为在必要时很容易解封它们,但反之则不然。一些代码生成器会自动执行此操作。(参见上面 Eric Lippert 的选项#3。它基本上说的是同样的事情。)
我根本不会认为它会增加垃圾。相反,你清楚地表达了你对课程的意图。
类应该被设计为继承或被密封。不幸的是,类在 C# 中默认情况下不是密封的,因此您必须自己包含关键字。就个人而言,我更喜欢一个关键字来显式地使类可用于继承,因为这将阻止人们将类用作基类,除非它被显式标记为基类。
是的。如果不出意外,这是一个路标,让其他人知道他们不应该走得更远。