sealed关键字的作用:
在类声明中运用sealed可防备别的类继续此类;在要领声明中运用sealed润饰符可防备扩大类重写此要领。
sealed润饰符重要用于防备非故意的派生,然则它还能促使某些运行时优化。细致说来,由于密封类永久不会有任何派生类,所以对密封类的实例的假造函数成员的挪用能够转换为非假造挪用来处置惩罚。
密封类:
密封类在声明中运用sealed 润饰符,如许就能够防备该类被别的类继续。假如试图将一个密封类作为别的类的基类,C#将提醒失足。天经地义,密封类不能同时又是笼统类,由于笼统老是愿望被继续的。
在哪些场所下运用密封类呢?实际上,密封类中不可能有派生类。假如密封类实例中存在虚成员函数,该成员函数能够转化为非虚的,函数润饰符virtual 不再见效。
让我们看下面的例子:
abstract class AbstractClass { public abstract void Method( ) ; } sealed class SealedClass: AbstractClass { public override void Method( ) { //... } }
假如我们尝试写下面的代码
class OtherClass: SealedClass
{
}
C#会指出这个毛病,通知你SealedClass 是一个密封类,不能试图从SealedClass 中派生任何类。
密封要领:
C#还提出了密封要领(sealedmethod) 的观点,以防备在要领地点类的派生类中对该要领的重载。对要领能够运用sealed 润饰符,这时候我们称该要领是一个密封要领。
不是类的每一个成员要领都能够作为密封要领密封要领,要作为密封要领必需对基类的虚要领举行重载,供应细致的完成要领。所以,在要领的声明中,sealed 润饰符老是和override 润饰符同时运用。请看下面的例子代码:
using System ; class A { public virtual 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
以上就是C#中sealed关键字的作用详解的细致内容,更多请关注ki4网别的相干文章!