关于sealed的⽤法
sealed的中⽂意思是密封,故名思义,就是由它修饰的类或⽅法将不能被继承或是重写。
sealed关键字的作⽤:
在类声明中使⽤sealed可防⽌其它类继承此类;在⽅法声明中使⽤sealed修饰符可防⽌扩充类重写此⽅法。
sealed修饰符主要⽤于防⽌⾮有意的派⽣,但是它还能促使某些运⾏时优化。具体说来,由于密封类永远不会有任何派⽣类,所以对密封类的实例的虚拟函数成员的调⽤可以转换为⾮虚拟调⽤来处理。
密封类:
密封类在声明中使⽤sealed 修饰符,这样就可以防⽌该类被其它类继承。如果试图将⼀个密封类作为其它类的基类,C#将提⽰出错。理所当然,密封类不能同时⼜是抽象类,因为抽象总是希望被继承的。
在哪些场合下使⽤密封类呢?实际上,密封类中不可能有派⽣类。如果密封类实例中存在虚成员函数,该成员函数可以转化为⾮虚的,函数修饰符virtual 不再⽣效。
让我们看下⾯的例⼦:
1 abstract class AbstractClass
2 {
3public abstract void Method( ) ;
4 }
5sealed class SealedClass: AbstractClass
6 {
7 public override void Method( )
8 { //... }
9 }
如果我们尝试写下⾯的代码
class OtherClass: SealedClass
{
}
C#会指出这个错误,告诉你SealedClass 是⼀个密封类,不能试图从SealedClass 中派⽣任何类。
密封⽅法:
C#还提出了密封⽅法(sealedmethod)的概念,以防⽌在⽅法所在类的派⽣类中对该⽅法的重载。对⽅法可以使⽤sealed 修饰符,这时我们称该⽅法是⼀个密封⽅法。
不是类的每个成员⽅法都可以作为密封⽅法密封⽅法,要作为密封⽅法必须对基类的虚⽅法进⾏重载,提供具体的实现⽅法。所以,在⽅法的声明中,sealed 修饰符总是和override 修饰符同时使⽤。请看下⾯的例⼦代码:
1using System ;
2class A
3 {
4 public virtual void F( )
5 {
writeline方法的作用Console.WriteLine("A.F") ;
}
6
public virtual void G( )
7 {
Console.WriteLine("A.G") ;
}
8 }
9class B: A
10 {
11sealed override public void F( ) 12 {
Console.WriteLine("B.F") ; }
13
override public void G( )
14 {
Console.WriteLine("B.G") ; } 15 }
16
class C: B
17 {
18 override public void G( )
19 {
Console.WriteLine("C.G") ; }
20 }
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论