重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
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.中的例②。
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。