C#学习笔记之密封类与密封方法
本文导语: 1,使用关键字sealed,声明的类不能继承,声明的方法不能重写。相当于Java中的final关键字。 2,定义如下 ① 密封类的定义 代码示例: sealed class myClass { } //下面的定义在编译时会报错 ...
1,使用关键字sealed,声明的类不能继承,声明的方法不能重写。相当于Java中的final关键字。
2,定义如下
① 密封类的定义
{
}
//下面的定义在编译时会报错
class myChildClass : myClass
{
}
② 密封方法的定义
{
public virtual void OnlyForMe()
{
}
}
//下面的方法OnlyForMe被定义为密封方法
class myChildClass : myClass
{
//非重写方法不可密封
public sealed override void OnlyForMe()
{
}
}
//报错 【继承成员“继承.myChildClass.OnlyForMe()”是密封的,无法进行重写】
class myGrandSon : myChildClass
{
public override void OnlyForMe()
{
}
}
3,密封类一般用于不希望第三方扩展类的情况下。.NET基类库就大量使用了密封类。比如string就是一个密封类。
在C#中,为了确保其他类不可以派生于某一类,可以使用sealed关键字密封该类,对某个类使用 sealed关键字作为前缀,这样可以防止其他类继承自该类,例如:
下面的语句将导致产生错误:
public class Rhombus:Square
{}
密封类中不能包含虚方法(Virtual)和抽象方法(abstract),因为在密封的类没有为派生类提供实现其虚方法和抽象方法的机会。
也可以使用密封方法,从而其他派生类不可以重写在当前类中提供的实现,如
{
public override double Area()
{
return this.length*this.width;
}
}
为了防止Rectangle的派生类(如Square)修改Area()实现,可使用sealed 关键字作为该方法的前缀,如:
{
public override sealed double Area()
{
return this.length*this.width;
}
}
现在,如果尝试重写Square类中的Area()方法,会产生错误:
public class Square:Rectangle
{
///---Error:Area() is sealed in Rectangle class---
public override double Area()
{
///具体实现
}
}
就是
这些了,C#学习笔记之C#的密封类与密封方法,希望结大家有所帮助。