密封類概述
并不是所有的類都可以被繼承,C#語言中就是密封類。在C#語言中我們可以把類聲明為sealed。這表示不能繼承該類,如果想要繼承那么編譯器肯定會報錯。在把類或方法標記為sealed時,最可能出現的情形時:如果要對庫,類或自己編寫的其他類進行操作,則重寫某些功能會導致編譯錯誤。也可以因商業原因把類或方法標記為sealed,以防第三方違反注冊協議的方式擴展該類。但是在一般情況下,在把類或方法標記為sealed時要小心,因為這么做會限制它的使用。即使不希望它能繼承一個類或重寫類的某個成員,仍有可能在將來的某個時刻,有人會遇到沒有預料到的情形。.NET基類庫大量使用了密封類,使希望從這些類派生出自己的類的第三方開發人員無法訪問這些類。
密封類的聲明格式為:
訪問修飾符 sealed class 類名:基類或接口
{
類體
}
其中訪問修飾符,基類或接口都是可選的。
密封方法概述
當實例方法聲明包含sealed修飾符時,稱方法為密封方法。如果實例方法聲明包含sealed修飾符,則它必須包含override修飾符。使用sealed修飾符可以防止派生類進一步重寫該方法。要在方法中使用sealed關鍵字,必須現在基類上將其聲明為重寫。如果基類上不希望有重寫的方法或屬性,就不要將其聲明為virtual。
訪問修飾符 sealed override 方法名稱(參數列表)
{
方法體
}
其中訪問修飾符,參數列表都是可選的。
來看看實例
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
<span style= "font-size:18px;" > using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace qq { class class1 { public virtual void seaText() { Console.WriteLine( "這是一個未密封的方法!" ); } } sealed class class2 : class1 { public sealed override void seaText() { Console.WriteLine( "這是一個密封的方法!" ); } } /*class class3 : class2//密封類不能被繼承 { public override void seaText()//不能重寫密封方法 { Console.WriteLine("這是一個不能運行的方法!"); } }*/ class Program { static void Main( string [] args) { class2 c2 = new class2(); c2.seaText(); Console.ReadLine(); } } }</span> |
很簡單得出的輸出結果:這是一個密封的方法
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
|
<span style= "font-size:18px;" > using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace qq { sealed class Person { public void print_Person_name() { Console.WriteLine( "張三" ); } } class Student : Person //密封類不能被繼承 { } class Program { static void Main( string [] args) { Student s1 = new Student(); s1.Print_Person_name(); //不能調用密封類的方法 Console.ReadLine(); } } }</span> |
這是一個錯誤的實例,在我們使用密封類的時候不能出現這樣的情況,再者就是這樣的關鍵字我們一般要少用。
以上就是關于C#的密封類的全部內容介紹,希望對大家的學習有所幫助。