C# 密封类和密封方法

时间:2021-10-23 19:16:20

C#中使用关键字sealed,将类和方法声明为密封类或者密封方法;   

sealed class A  //密封类   {         }      public sealed override void N()  //密封方法    {        Console.WriteLine();     }


2.对于密封类来说,表示该类不能被继承;对于密封方法来说,表示该方法不能被重写;

例①:   

//对于密封类来说,表示该类不能被继承     sealed class A     {     }     class B : A //错误提示:B无法从密封类型A派生     {     }

例②:    

class A     {         public virtual void M()         {             Console.WriteLine("M()方法被调用!");         }                  public virtual void N()         {             Console.WriteLine("N()方法被调用!");         }     }          class B : A     {         public override void M()         {             Console.WriteLine("M()方法被重写!");         }                  public sealed override void N()         {             Console.WriteLine("N()方法被重写并被密封!");         }     }          class C : B     {        public override void M() //B重写了A中的N方法而且没有密封,C就可以重写B中的N方法了        {             Console.WriteLine("M()方法!");        }                 public override void N() //报错,B重写了A中的N方法并密封,C就无法重写B中的N方法了         {         }     }


3.密封类不能作为基类被继承,但它可以继承别的类或借口;   

      interface D //声明一个接口     {     }          sealed class A : B  //密封类可以继承其他非密封类     {     }          sealed class C : D //密封类可以继承接口     {     }          class B : A  // 报错,B无法从密封类型A派生,密封类不能被继承     {     }


4.密封类不能被声明为抽象的,因为抽象类总希望被继承,而密封类不能被继承。(sealed和abstract不  能修饰一个类名)

      sealed abstract class A  //抽象类不能同时又是密封的或者静态的     {              }


5.在密封类中不能声明受保护成员(声明了也不报错)、虚成员、抽象成员,因为受保护成员只能从派生  类进行访问,而虚成员只能在派生类中重写,非抽象类中不能有抽象方法。

      sealed class A       {         protected void B() //不报错,密封类中声明了新的保护成员         {         }                  public virtual void C() //报错,错误提示: C是密封类A中的虚拟成员         {         }                  public abstract void D(); //报错,错误提示: D是抽象的,但是它包含在非抽象类A中     }