C#密封类
一、密封类
1. 密封类的定义
如果我们不希望自己编写的类被继承;如果有的类已经没有再被继承的必要,这时,我们可以使用sealed修饰符在类中进行声明,以达到该类不能派生其它类的目的,该类就被称为密封类。
2. 密封类与抽象类
密封类不能同时又是抽象类,因为密封类不能用作基类、也不能被继承,而抽象类总是希望被继承的。
3. 什么情况下使用密封类
需要阻止其它程序员无意中继承该类的时候;在程序运行时需要起到优化效果的时候,可以使用密封类。
4. 示例
using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace Test
{ class Program { sealed class A // 密封类。不能从该类再派生出其它类 { public int x; public int y; } static void Main(string[] args) { // C#密封类-www.baike369.com A a = new A(); a.x = 10; a.y = 20; Console.WriteLine("x = {0}; y = {1}", a.x, a.y); Console.ReadLine(); } }}运行结果:
x = 10; y = 20二、密封方法
1. 密封方法
对类中的方法可以使用sealed修饰符,我们称该方法为密封方法。
不是类的每个成员方法都可以作为密封方法,密封方法必须对基类的虚方法进行重载,提供具体的实现方法。所以,在方法的声明中,sealed修饰符总是和override修饰符同时使用,sealed修饰符位于override修饰符前面。
2. 示例
class A{ public virtual void F() { Console.WriteLine("A.F"); } public virtual void G() { Console.WriteLine("A.G"); }}class B : A
{ sealed override public void F() { Console.WriteLine("B.F"); } override public void G() { Console.WriteLine("B.G"); }}class C : B
{ override public void G() { Console.WriteLine("C.G"); }}类B对基类A中的两个虚方法都进行了重载,其中F方法使用了sealed修饰符,成为一个密封方法。G方法不是密封方法,所以在B的派生类C中,可以重载方法G,但是不能重载方法F。
(摘抄至melao2006博客)