前言:密封类可以用来限制扩展性,如果密封了某个类,则其他类不能从该类继承;如果密封了某个方法,则派生类不能重写该方法的实现。由此可以,密封类与密封方法在我们C#编程中的重要性!下来,让我们开始学习!
一、概念介绍
1、密封类
有些时候,我们并不希望所编写的类被继承,如果所有的类都可以被继承,则类的层次结构将会变得十分复杂,从而加重理解类的困难。此时,可以用sealed
来定义密封类。这样的话,可以防止被其他类继承。
- C#中的密封类是指该类不可以被继承。
- 密封类中的方法不需要定义成密封的。
- 密封类不能用作基类。因此,它也不能是抽象类。密封类主要用于防止派生。由于密封类从不用作基类,所以有些运行时优化可以使对密封类成员的调用略快。
2、密封方法
sealed
对于方法表示不能重写该方法,此时,此方法为密封方法。
-
并不是每个方法都可以声明为密封方法,密封方法只能用于对基类的虚方法进行实现,并提供具体的实现。所以,声明密封方法时,
sealed
修饰符总是和override
修饰符同时使用。 -
在对基类的虚成员进行重写的派生类上的类成员、方法、字段、属性或事件可以将该成员声明为密封成员。在用于以后的派生类时,这将取消成员的虚效果。方法是在类成员声明中将
sealed
关键字置于override
关键字的前面。
二、示例讲解
1、密封类
2、密封方法
三、补充知识
1、密封类
- 不是所有的类都可以继承,不能别继承的类叫做密封类。如果一个类不希望被继承、被派生可以采用关键字
sealed
。 - 密封类中不能包含虚方法和抽象方法,抽象方法和虚方法的存在就是要用来继承的,密封的类没有为派生类实现实现虚方法和抽象方法的机会。
- .NET类库大量使用密封类,使希望从这些类从这些类中派生出自己的类的第三方开发人员无法访问这些类,例如
string
就是密封类。
2、密封方法
- 用修饰符
sealed
进行标记的方法。 - 使用
sealed
修饰可以防止派生类进一步重写该方法。 - 如果实例方法声明包含
sealed
修饰符,则它必须包含override
修饰符。 - 不能重写密封方法。
四、用途总结
- 密封类就是将一个类密闭起来,断其后代的一种方式。就是从修饰符的类派生出其他的类,所以密封类不能继承。密封类可以继承其他类,充当基类。
- 密封方法是重写的方法(重写父类方法、重写抽象方法)不是为了防止继承而是防止重写。
- 为了防止重写某些类或方法导致代码混乱,此时,我们可以使用密封类和密封方法。
- 密封类除了不能被继承外,与非密封类的用法大致相同,而密封方法则必须通过重写基类中的虚方法来实现。