標籤:display ref .text targe [] 運行 abstract 調用 ext
sealed 修飾符表示密封
用於類時,表示該類不能再被繼承,不能和 abstract 同時使用,因為這兩個修飾符在含義上互斥
用於方法和屬性時,表示該方法或屬性不能再被重寫,必須和 override 關鍵字一起使用,因為使用 sealed 修飾符的方法或屬性肯定是基類中相應的虛成員
通常用於實現第三方類庫時不想被用戶端繼承,或用於沒有必要再繼承的類以防止濫用繼承造成階層體系混亂
恰當的利用 sealed 修飾符也可以提高一定的運行效率,因為不用考慮繼承類會重寫該成員
樣本:
Code
using System;
using System.Collections.Generic;
using System.Text;
namespace Example06
{
class Program
{
class A
{
public virtual void F()
{
Console.WriteLine("A.F");
}
public virtual void G()
{
Console.WriteLine("A.G");
}
}
class B : A
{
public sealed override void F()
{
Console.WriteLine("B.F");
}
public override void G()
{
Console.WriteLine("B.G");
}
}
class C : B
{
public override void G()
{
Console.WriteLine("C.G");
}
}
static void Main(string[] args)
{
new A().F();
new A().G();
new B().F();
new B().G();
new C().F();
new C().G();
Console.ReadLine();
}
}
}using System;
using System.Collections.Generic;
using System.Text;
namespace Example06
{
class Program
{
class A
{
public virtual void F()
{
Console.WriteLine("A.F");
}
在基類(父類)中用virtual修飾符聲明一個虛方法,然後在在衍生類別(子類)中用override修飾符覆蓋基類虛方法。表明是對基類的虛方法重載。
這種優勢在於它可以在程式運行時再決定調用哪一個方法,這就是所謂的“運行時多態”
或者稱動態綁定。
public virtual void G()
{
Console.WriteLine("A.G");
}
}
class B : A
{
public sealed override void F()
{
Console.WriteLine("B.F");
}
public override void G()
{
Console.WriteLine("B.G");
}
}
class C : B
{
public override void G()
{
Console.WriteLine("C.G");
}
}
static void Main(string[] args)
{
new A().F();
new A().G();
new B().F();
new B().G();
new C().F();
new C().G();
Console.ReadLine();
}
}
}
結果: 類 B 在繼承類 A 時可以重寫兩個虛函數,:
由於類 B 中對 F 方法進行了密封, 類 C 在繼承類 B 時只能重寫一個函數,:
控制台輸出結果,類 C 的方法 F 只能是輸出 類B 中對該方法的實現:
A.F A.G B.F B.G B.F C.G
簡述c#之sealed 修飾符