密封类2007-11-10 本站 想想看,如果所有的类都可以被继承,继承的滥用会带来什么后果?类的层次结构体系将变得十分庞大,类之间的关系杂乱无章,对类的理解和使用都会变得十分困难。有时候,我们并不希望自己编写的类被继承。另一些时候,有的类已经没有再被继承的必要。提出了一个密封类(sealed class)的概念,帮助开发人员来解决这一问题。密封类在声明中使用sealed修饰符,这样就可以防止该类被其它类继承。如果试图将一个密封类作为其它灯的基类,C#将会提示出错。理所当然,密封类不能同时又是抽象类,因为抽象总是希望被继承的。在哪些场合下使用密封类呢?密封类可以阻止其它程序员在无意中继承该类,而且密封类可以起到运行时优化的效果。实际上,密封类不可能有派生类,如果密封类实例中存在虚成员函数,该成员函数可以转化为非虚的,函数修饰符virtual不再生效。让我们看下面的例子:
abstract class A{ public abstract void F();}sealed class B:A{ public override void F(){ //F的具体实现代码 }}
如果我们尝试写下面的代码:class C:B{}C#会指出这个错误,告诉你B是一个密封类,不能试图从B中派生任何类。