1. 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中    }

6.并不是每个方法都可以声明为密封方法,密封方法只能用于对基类的虚方法进行实现并提供具体的实  现,所以,声明密封方法时,sealed总是和override同时使用。

  如2.中的例②。