关键字Sealed

sealed中文:密封,就是说有它修饰的类或者方法将不能被继承或者重写 
作用:在类声明中使用sealed可以防止其他类继承此类,在方法声明中使用sealed修饰符可以防止扩充类重写此方法。 
sealed修饰符主要用于防止非有意的派生,但是它还能促使某些运行时优化。换句话说,密封类永远不会有任何派生类,所以对密封类的实例的虚拟函数成员的调用可以转换为非虚拟调用处理。

实际应用:密封类中不可能有派生类,如果密封类实例中存在虚成员函数,该成员函数可以转化为非虚的,函数修饰符virtual不再生效。 
EX: 

1.  abstract class AbstractClass   
2.   {   
3.         public abstract void Method( ) ;   
4.   }   
5.     
6.   sealed class SealedClass: AbstractClass   
7.   {   
8.          public override void Method( )   
9.           { //... }   
10.  } 
从上面中可以看到,定义了一个抽象类AbstractClass  ,密封类一个SealedClass类,该类继承于AbstractClass  ,因为抽象类总是希望被继承,所以继承后子类可以对父类的方法进行重写(override修饰符) 


然而我们再写一个类: 
class OtherClas:SealedClass 


C#会报错  

密封方法: 
C#还提出了密封方法(sealedmethod)的概念,以防止该方法所在的类的派生类中对该方法进行重载。密封方法可以使用sealed修饰符,这是我们称该方法为一个密封方法。当然,不是类的每个成员方法都可以作为密封方法,要作为密封方法必须对基类的虚方法进行重载,提供具体的实现方法。所以在方法的声明中,sealed修饰符总是和override修饰符同时使用。

例子: 
using system; 
class A 

     public vrtual void F() 

     console.writeLine("A.F"); 



public virtual void G() 

  console.writeLine("A.G"); 




class B:A 

sealed override public void F() 

console.writeLine("B.F"); 

override public void G() 

console.writeLine("B.G"); 






class C:B 

override public void G() 

     console.WriteLine("C.G"): 

运行玩程序可以发现,类B对基类A的两个虚方法进行了重载,其中F方法使用了sealed修饰符,成为了一个密封方法,而G不是密封方法,所以在B类的派生(子类)C中,可以重载方法G,但不能重载方法F.

 

转载于:https://www.cnblogs.com/ccssxx/p/10781648.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值