简述c#之sealed 修饰符
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
?
轉載于:https://www.cnblogs.com/TJessica/p/7059391.html
總結
以上是生活随笔為你收集整理的简述c#之sealed 修饰符的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 將軍苑 - 收藏集 - 掘金
- 下一篇: SQL SERVER 使用 OPENRO