如果所有的类都能被继承,将会导致继承的滥用。会使整个项目程序的结构变得错综复杂,不利于对系统的维护。因此需要根据具体需要,对类和其成员进行密封。在本节的内容中,将分别对密封类和密封成员的基本知识进行简要说明。
1.密封类
在C#中,通常将没有必要封装处理被继承的类进行密封,这样被密封的类称为密封类。当一个类被密封后,就不能被其他的类所继承。
在C#中,使用sealed修饰符来密封一个类,具体格式如下:
在声明类时,当用sealed修饰符修饰后就构成了密封类。如果这个密封类被其他类继承后,就会产生编译错误。
注意
一个密封类不能同时是抽象类,所以sealed和abstract不能同时使用。例如,下面的一段代码将会发生变异错误:
在上述代码中,类nn被声明为密封类,所以当类zz继承类nn时,将会出现错误。
通过密封类可以防止程序内发生意外的派生。因为密封类不能被继承,所以对密封类实例虚函数的调用可以转换为非需调用来处理,这样可以提高程序的运行性能。
2.密封成员(www.xing528.com)
在C#的非密封类中,如果要防止一个实例成员在子类中被重写,可以将该成员设置为密封成员。具体方法是,在该成员声明时使用修饰符sealed来修饰。C#的密封成员可以是密封方法、密封属性、密封索引和密封事件,其中密封方法在现实中最为常见。
注意
1)并不是所有的函数方法都能被密封。密封方法只能用于对基类的虚方法进行重写,并提供具体实现。所以在密封方法声明时,sealed修饰符需要和override修饰符同时使用。通过使用sealed修饰后,可以防止派生子类重写该方法。
2)两个sealed修饰符不能同时使用。
看下面的一段代码:
在上述代码中,类nn提供了如下两个重写方法,具体说明如下。
1)密封方法F(),在nn的子类zz中,此方法不能被重写。
2)没有密封方法A(),在nn的子类zz中,此方法可以被重写。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。