密封類
通過在類定義前面放置關鍵字 sealed,可以將類
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();
}
}
}
閱讀更多 AI小浩2019 的文章