sealed 将用于密封类或密封类的成员。
sealed 类
密封的类将不能被继承,也就是不能成为其他类的基类。
- 不能与 abstract 共存(意思相反,abstract 是该类只能被继承,只能是其他类的基类)
- 该类中的成员不能是 abstract 的,由于它是必须被继承类重写的。警告 CS0513:“密封类 . 方法”是抽象的,但它包含在非抽象类型“密封类”中。
- 该类中的成员不能是 virtual 的,由于它是可以被继承类重写的。警告 CS0549:“密封类 . 方法”是密封类型“密封类”中新的虚拟成员。
- 因为 sealed 类永远不能用作基类,所以一些运行时优化可以使调用密封类成员的速度稍微快一些。
- 由于 struct 是隐式密封的,无法继承 struct。
sealed class LeiJi
{
}
class LeiP : LeiJi // 警告 CS0509:“LeiP”:无法从密封类型“LeiJi”派生
{
}
sealed 成员
当某个成员(方法、索引器、属性或事件)是被该类重写的基类成员时,可以声明为 sealed。若该类被派生,该类重写的 sealed 成员将不能被重写。
- 仅限于与 override 共存(放在它前面),也就是只能密封重写的派生成员。
- 若基类的成员未声明为 virtual 或 abstract(抽象类),派生类无法重写它们,也就无法密封它们
class LeiJi
{
public virtual void FF ( )
{
Console . WriteLine ( "Ji . FF" );
}
public void FFJi ( )
{
}
}
class LeiP : LeiJi
{
public sealed override void FF ( )
{
base . FF ( );
Console . WriteLine ( "P . FF" );
}
//public sealed void FFP ( ) // 警告 CS0238:因为“LeiP . FFP”不是重写,所以无法将其密封
// {
// }
}
class LeiPs : LeiP
{
public void FFPs ( )
{
FF ( ); // 无法重写,但可以直接用……
}
//public override void FF ( ) // 警告 CS0239:“LeiPs . FF”:继承成员“LeiP . FF”是密封的,无法进行重写
// {
// }
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。