c#中sealed关键字

本文详细介绍了 C# 中的 sealed 关键字,用于防止类被继承和方法被重写。密封类(sealed class)不允许有派生类,从而确保其行为不可更改,而密封方法(sealed method)则防止派生类重写特定方法。通过使用 sealed,可以进行一些运行时优化,并保护类的设计不被意外修改。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

转载:  http://blog.sina.com.cn/s/blog_4dc31b560100d872.html#commonComment

sealed关键字的作用:
    在类声明中使用sealed可防止其它类继承此类;在方法声明中使用sealed修饰符可防止派生类重写此方法。
  sealed修饰符主要用于防止非有意的派生,但是它还能促使某些运行时优化。具体说来,由于密封类永远不会有任何派生类,所以对密封类的实例的虚拟函数成员的调用可以转换为非虚拟调用来处理

密封类:
    密封类在声明中使用sealed 修饰符,这样就可以防止该类被其它类继承。如果试图将一个密封类作为其它类的基类,C#将提示出错。理所当然,密封类不能同时又是抽象类,因为抽象总是希望被继承的

  在哪些场合下使用密封类呢?实际上,密封类中不可能有派生类。如果密封类实例中存在虚成员函数,该成员函数可以转化为非虚的,函数修饰符virtual 不再生效。

  让我们看下面的例子:

Java代码 
abstract class AbstractClass   
  1.  {   
  2.        public abstract void Method( ) ;   
  3.  }   
  4.   
  5.  sealed class SealedClass: AbstractClass   
  6.  {   
  7.         public override void Method( )   
  8.          { //... }   
  9.  }  

 

如果我们尝试写下面的代码

  1. class OtherClass: SealedClass   
  2. {    
  3. }  

C#会指出这个错误,告诉你SealedClass 是一个密封类,不能试图从SealedClass 中派生任何类。


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

  1. using System ;   
  2.   
  3. class A   
  4.  {   
  5.      public virtual void F( )   
  6.      {    
  7.             Console.WriteLine("A.F") ;    
  8.         }   
  9.         
  10.         public virtual void G( )   
  11.      {      
  12.             Console.WriteLine("A.G") ;    
  13.         }   
  14.  }   
  15.   
  16.  class B: A   
  17.  {   
  18.      sealed override public void F( )   
  19.    {    
  20.             Console.WriteLine("B.F") ;    
  21.          }   
  22.     
  23.         override public void G( )   
  24.      {   
  25.              Console.WriteLine("B.G") ; }   
  26.      }   
  27.   
  28.     class C: B   
  29.  {   
  30.     override public void G( )   
  31.      {    
  32.             Console.WriteLine("C.G") ;    
  33.         }   
  34.  }  


类B 对基类A 中的两个虚方法均进行了重,其中F 方法使用了sealed 修饰符,成为一个密封方法。G 方法不是密封方法,所以在B 的派生类C 中,可以重方法G,但不能重方法F。

原文多次将  重写  与  重载  混为一谈,在此已纠正。难道是十多年前的概念与现在的不同了?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值