前言:密封類可以用來限制擴展性,如果密封了某個類,則其他類不能從該類繼承;如果密封了某個方法,則派生類不能重寫該方法的實現。由此可以,密封類與密封方法在我們C#編程中的重要性!下來,讓我們開始學習!
一、概念介紹
1、密封類
有些時候,我們並不希望所編寫的類被繼承,如果所有的類都可以被繼承,則類的層次結構將會變得十分複雜,從而加重理解類的困難。此時,可以用sealed
來定義密封類。這樣的話,可以防止被其他類繼承。
- C#中的密封類是指該類不可以被繼承。
- 密封類中的方法不需要定義成密封的。
- 密封類不能用作基類。因此,它也不能是抽象類。密封類主要用於防止派生。由於密封類從不用作基類,所以有些運行時優化可以使對密封類成員的調用略快。
2、密封方法
sealed
對於方法表示不能重寫該方法,此時,此方法爲密封方法。
-
並不是每個方法都可以聲明爲密封方法,密封方法只能用於對基類的虛方法進行實現,並提供具體的實現。所以,聲明密封方法時,
sealed
修飾符總是和override
修飾符同時使用。 -
在對基類的虛成員進行重寫的派生類上的類成員、方法、字段、屬性或事件可以將該成員聲明爲密封成員。在用於以後的派生類時,這將取消成員的虛效果。方法是在類成員聲明中將
sealed
關鍵字置於override
關鍵字的前面。
二、示例講解
1、密封類
2、密封方法
三、補充知識
1、密封類
- 不是所有的類都可以繼承,不能別繼承的類叫做密封類。如果一個類不希望被繼承、被派生可以採用關鍵字
sealed
。 - 密封類中不能包含虛方法和抽象方法,抽象方法和虛方法的存在就是要用來繼承的,密封的類沒有爲派生類實現實現虛方法和抽象方法的機會。
- .NET類庫大量使用密封類,使希望從這些類從這些類中派生出自己的類的第三方開發人員無法訪問這些類,例如
string
就是密封類。
2、密封方法
- 用修飾符
sealed
進行標記的方法。 - 使用
sealed
修飾可以防止派生類進一步重寫該方法。 - 如果實例方法聲明包含
sealed
修飾符,則它必須包含override
修飾符。 - 不能重寫密封方法。
四、用途總結
- 密封類就是將一個類密閉起來,斷其後代的一種方式。就是從修飾符的類派生出其他的類,所以密封類不能繼承。密封類可以繼承其他類,充當基類。
- 密封方法是重寫的方法(重寫父類方法、重寫抽象方法)不是爲了防止繼承而是防止重寫。
- 爲了防止重寫某些類或方法導致代碼混亂,此時,我們可以使用密封類和密封方法。
- 密封類除了不能被繼承外,與非密封類的用法大致相同,而密封方法則必須通過重寫基類中的虛方法來實現。