C# 面向對象 密封類

密封類

通過在類定義前面放置關鍵字 sealed,可以將類

C# 面向對象 密封類

public sealed class D

{

// Class members here.

}

密封類不能用作基類。因此,它也不能是抽象類。密封類禁止派生。

由於密封類從不用作基類,所以有些運行時優化可以使對密封類成員的調用略快。

重寫基類虛成員的派生類成員,如方法、字段、屬性或事件,可被聲明為密封成員。

在後續的派生類中,這將取消該成員的虛效果。方法是在類成員聲明中將 sealed 關鍵字置於 override 關鍵字的前面。例如:

public class D : C

{

public sealed override void DoWork() { }

}

特點:(1) 使用sealed關鍵字來定義密封類。

(2) 密封類不能被繼承。

(3) 在密封類不能定義虛函數,不能定義抽象函數。

(4) 可以使用sealed關鍵字來密封方法,但是隻有在覆蓋基類的方法時才能使用sealed關鍵字。

(5) 使用sealed關鍵字密封的方法不能被覆蓋,防止派生類進一步重寫該方法,但能被重載,能被隱藏。

(6) 注意:在使用sealed關鍵字時,不能同時使用abstract或virtual關鍵字。

使用密封類注意一下幾點: 1、密封類不能作為基類被繼承,但它可以繼承別的類或接口。

2、在密封類中不能聲明受保護成員或虛方法,因為受保護成員和只能從派生類進行訪問,而虛成員只能在派生類中重寫。

3、由於密封類的不可繼承性,因此密封類不能聲明抽象的。

示例:

using System;

using System.Collections.Generic;

using System.Text;

namespace TestSealedClass_01

{ // 密封類 不能被繼承

sealed class A

{

public void Method1()

{}

//錯誤,在密封類中不能定義虛函數

//public virtual void Method2()

//{}

//錯誤,在密封類中不能定義抽象函數

//public abstract void Method3();

}

//class B : A //錯誤,密封類A不能被繼承

//{}

class AutoMobile

{

public virtual void Display()

{

Console.WriteLine("這是基類 AutoMobile");

}

//Display()方法不是重寫,所以不能使用sealed關鍵字

//public sealed void Display()

//{

// Console.WriteLine("這是基類 AutoMobile");

//}

}

class Car : AutoMobile

{

//使用sealed關鍵字來密封方法

public sealed override void Display()

{

Console.WriteLine("這是派生類 Car");

}

public void Display(string mark) //使用sealed關鍵字密封的方法,能被重載

{

Console.WriteLine("這是派生類 Car:{0}", mark);

}

}

class SmallCar : Car

{

//使用sealde關鍵字密封的方法,不能被覆蓋

//public override void Display()

//{}

//使用sealde關鍵字密封的方法,能被隱藏

public new void Display()

{ Console.WriteLine("這是派生類 Car"); }

}

class Program

{

static void Main(string[] args)

{

Car car = new Car();

car.Display();

}

}

}


分享到:


相關文章: