我是否应该密封我知道的所有课程,即使没有明显的性能或安全问题,也不应该被用作基类,或者这只是增加了什么?
答案 0 :(得分:47)
一个可扩展的类实现了它可以扩展的特性 - 这是一个类似于类的任何其他特性的特性,应该被视为一个,与方法没有区别。应仔细考虑所有功能,以确保它们使用该功能满足客户的目标。需要针对安全问题设计,实施,审查功能,调试,记录和维护。
所有这些都需要付出努力,努力通常需要花钱。你花了多少钱?他们可能会对您是否应该使用此功能发表意见。
基本上,您有三种选择:
1)花钱去做这个功能,这样你就可以确信它是正确,强大,安全并满足用户需求。
2)请不要执行上述任何操作,但无论如何都要提供该功能,并希望运送未经授权,快速实施,未经测试,未记录,未经证实且具有未知安全风险的功能不会对您,您的雇主或您的客户造成伤害。
3)密封课程。如果您发现(1)是正确的选择,请在以后开封。
我说(3)物有所值。我总是密封我写的每个不是为了可扩展性而设计的课程。
答案 1 :(得分:11)
将类设置为sealed
并不重要,因为这样做会在代码中设置严格的规则:此类不能被继承。
只有在没有必要和混乱的情况下,代码才是残缺的。
那就是说,一种思想流派(和简单的经验法则)是你应该总是密封所有类别,因为如果有必要,它很容易开封,但反之亦然。一些代码生成器自动执行此操作(参见Eric Lippert上面的#3选项。基本上说的是同样的事情。)
答案 2 :(得分:7)
我不认为这会增加任何瑕疵。相反,你清楚地表达了你对课程的意图。
类应设计为继承或密封。不幸的是,在C#中默认情况下不会对类进行密封,因此您必须自己包含关键字。就个人而言,我更倾向于使用关键字来明确地使类可用于继承,因为这会阻止人们将类用作基类,除非它被明确标记为这样。
答案 3 :(得分:5)
是。如果不出意外,它就是一个路标,让别人知道他们不应该走得太远。