C#中的密封类和密封方法
密封类
密封类可以用来限制扩展性,如果密封了某个类,则其他类不能从该类继承。
如果密封了某个成员,则派生类不能重写该成员的实现。
一个密封类是没有也不能继承的类,因此sealed关键字和abstract关键字不能同时使用。
密封类中不能包含虚方法(Virtual)和抽象方法(abstract),因为在密封的类没有为派生类提供实现其虚方法和抽象方法的机会。
密封类不能作为基类被继承,但它可以继承别的类或借口;
在密封类中不能声明受保护成员(声明了也不报错)、虚成员、抽象成员,因为受保护成员只能从派生 类进行访问,而虚成员只能在派生类中重写,非抽象类中不能有抽象方法。
密封类除了不能被继承外,其他与非密封类一样。
C#中声明密封类时需要使用sealed关键字。
语法:访问修饰符 sealed class 类名:基类或接口{
//类成员
}
public sealed class myClass //声明密封类{
public int i=0;
public void methed()
{
Console.WriteLine("密封类");
}
}
密封方法
密封方法是为了重写基类的虚方法并提供具体的实现,同时防止其后继类(派生类)再次重写该虚方法。
作用:使用sealed修饰符可以防止派生类进一步重写该方法
注意:如果实例方法声明包含sealed修饰符,则它必须也包含override修饰符。
要在方法中使用sealed关键字,必须先在基类上将其声明为重写。如果基类上不希望有重写的方法或属性,就不要将其声明为virtual。
密封类除了不能被继承外,其他与非密封类一样,密封方法则必须通过重写基类中的虚方法来实现。
public/*基类的可访问性一定要高于子类的,平级也可以*/class Class1
{
public virtual void Write()
{
Console.WriteLine("未密封方法");
}
}
//如果一个类不希望将来在使用的过程中被继承,被派生,这时候可以采用关键字sealed
//虚方法virtual 抽象方法abstract的存在就是为了继承,为了派生,因此不能被放在sealed类中
public class Class2:Class1
{
public sealed override void Write()
{
Console.WriteLine("密封方法");
}
}
public class Class3:Class2
{
/* public override sealed void Write()
{
在Class2中该方法被密封,无法重写。
}*/
}

浙公网安备 33010602011771号