C# 我是否应该密封我知道的所有类别;你从来没有被用作基类吗?

C# 我是否应该密封我知道的所有类别;你从来没有被用作基类吗?,c#,coding-style,class,sealed,C#,Coding Style,Class,Sealed,我是否应该密封我知道的所有类,即使在没有明显的性能或安全问题的情况下,也不应该将其用作基类,或者这只是增加了问题?是的。如果没有其他东西,它就是一个路标,让其他人知道他们不应该走得更远。将类设置为密封,这并不粗糙,因为这样做会在代码中设置一个严格的规则:这个类不能被继承 只有当代码不必要且容易混淆时,它才是粗糙的 这就是说,一个学派的思想(和简单的经验法则)是,你应该总是密封所有的类,因为如果有必要,很容易打开它们,但反之亦然。有些代码生成器会自动执行此操作。(见上面提到的Eric Lipper

我是否应该密封我知道的所有类,即使在没有明显的性能或安全问题的情况下,也不应该将其用作基类,或者这只是增加了问题?

是的。如果没有其他东西,它就是一个路标,让其他人知道他们不应该走得更远。

将类设置为
密封
,这并不粗糙,因为这样做会在代码中设置一个严格的规则:这个类不能被继承

只有当代码不必要且容易混淆时,它才是粗糙的


这就是说,一个学派的思想(和简单的经验法则)是,你应该总是密封所有的类,因为如果有必要,很容易打开它们,但反之亦然。有些代码生成器会自动执行此操作。(见上面提到的Eric Lippert的第3条,基本上说的是同一件事)

< P>我不认为它会增加任何东西。相反,你清楚地表达了你对课堂的意图


类应设计为继承或密封。不幸的是,类在C#中不是按默认值密封的,因此您必须自己包含关键字。就我个人而言,我更喜欢使用关键字来显式地使类可用于继承,因为这样可以防止人们将类用作基类,除非它显式地标记为基类

一个可扩展的类实现了它可以扩展的特性——这是一个与类的任何其他特性类似的特性,应该被视为一个特性,与方法没有区别。应仔细考虑所有功能,以确保它们满足使用该功能的客户的目标。需要设计、实施、审查安全问题、调试、记录和维护功能

所有这些都需要付出努力,而努力通常需要花费金钱。你在花谁的钱?他们可能会对您是否应该使用此功能有意见

基本上,您有三种选择:

1) 花点钱做这个功能,让你有信心它是正确的,健壮的,安全的,并且满足用户的需求

2) 不做上述任何一项,但无论如何都要发布该功能,并希望发布一个未经设计、快速实现、未经测试、未记录、未维护且存在未知安全风险的功能不会伤害您、您的雇主或客户

3) 封班。如果您发现(1)是正确的选择,请稍后将其打开


我说(3)是物有所值的。我总是密封我编写的每一个不是为可扩展性而设计的类。

就像几乎所有关于如何操作的答案一样,这取决于具体情况。通过在默认情况下密封类并仅在需要时解封,可以获得一些优化。看看:埃里克,这里有个问题要问你。就像在重写方法之前必须将方法声明为“virtual”一样,为什么C#不采用类似的方法来指示类可以被继承并在默认情况下密封它。只是好奇,我买这个。你认为默认情况下C类应该被密封吗?@Daniel,@SolutionYogi:我希望我们已经这样做了。但我其实是少数,;有很多人认为,只有当你有理由这样做的时候,你才应该密封类。我不同意;我认为只有当你有理由这样做的时候,你才应该打开课堂。@Daniel:因为我认为这太棒了。(如果你用RSS阅读器阅读博客,你会发现它没有格式。)@SunnyMilenov:他们指的是我的博客帖子:。杰夫·阿特伍德的博客文章提到的是:。我对杰夫的回应如下:。可悲的是,反应不再是紫色的露西达。你不觉得这很讽刺吗?除非你知道你的客户会有支持方面的问题,否则千万不要封闭一个类。