爲了避免濫用繼承,c#中提出了密封類的概念。
1.1密封類的概念及聲明
密封類可以用來限制擴展性,如果密封了某個類,則其他類不能從該類繼承。如果密封了某個成員,則派生類不能重寫該成員的實現。默認情況下,不應密封類型和成員。密封可以防止對庫的類型和成員進行自定義,但也會影響某些開發人員對可用性的認識。
c#中使用密封類時,如果類滿足如下條件,則應將其密封
- 類是靜態類。
- 類包含帶有安全敏感信息的繼承的受保護成員。
- 類繼承多個虛成員,並且密封每個成員的開發和測試開銷明顯大於密封整個類。
- 類是一個要求使用反射進行快速搜索的屬性。密封屬性可提高反射在檢索屬性時的性能。
c#密封類需要用到sealed關鍵字,具體語法如下
訪問修飾符 sealed class 類名:基類或接口
{
//類成員
}
在申明密封方法時,必須通過重寫基類中的虛方法實現。
1.密封類不能作爲基類被繼承,但他可以繼承別的類或接口
2.在密封類中不能聲明受保護成員或虛成員,因爲受保護成員只能從派生類進行訪問,而虛成員只能在派生類中重寫。
3.由於密封類的不可繼承性,因此密封類不能聲明爲抽象的,即sealed修飾符不能與abstract修飾符同時使用