编辑:我认为课程应该设计为开放的。有一些限制,但不应因继承而关闭。
原因:对我来说,“最终班”或“密封班”似乎很奇怪。我永远不必将自己的一个班级标记为“最终”(“密封”),因为稍后可能需要在该班级中设置班级。
我已经购买/下载了带有类的第三方库((大多数视觉控件)),并且非常感谢这些库中没有一个使用“最终”库,即使它们在其中进行了编码的编程语言支持也是如此,因为我结束了对这些类的扩展,即使我已经编译了没有源代码的库。
有时,我不得不处理一些偶然的“密封”类,然后结束包含给定类的具有类似成员的新类“包装”。
class MyBaseWrapper {
protected FinalClass _FinalObject;
public virtual DoSomething()
{
// these method cannot be overriden,
// its from a "final" class
// the wrapper method can be open and virtual:
FinalObject.DoSomething();
}
} // class MyBaseWrapper
class MyBaseWrapper: MyBaseWrapper {
public override DoSomething()
{
// the wrapper method allows "overriding",
// a method from a "final" class:
DoSomethingNewBefore();
FinalObject.DoSomething();
DoSomethingNewAfter();
}
} // class MyBaseWrapper
范围分类器可以“密封”某些功能,而不会限制继承。
当我从结构化进程切换时。在OOP中,我开始使用私有类成员,但是在许多项目之后,我结束了使用protected,并最终将这些属性或方法推广到public(如果需要)。
PS我不喜欢C#中的“ final”作为关键字,而是在继承隐喻之后使用Java之类的“ sealed”或“ sterile”。此外,“最终”是在多种情况下使用的歧义词。