以密封類別限制擴充性
更新:2007 年 11 月
您可以使用密封來限制開發人員可以擴充架構的方法。當您密封某個類別時,其他類別即無法從它繼承而來。當您密封某個成員時,衍生類別將無法覆寫此成員的實作。根據預設,您不應該密封型別和成員,因為密封將會無法自訂程式庫型別和成員,並影響某些開發人員對可用性的認知。此外,擴充性是使用物件導向架構的一個重要優點,您應該要謹慎衡量損失這項優點的決策。
一定要有充分的理由,才能密封類別。
不要因為您沒有看到擴充類別是十分理想的案例就假設密封類別是適當的動作;您應該將符合某些條件的類別密封:
類別為靜態
類別包含繼承的受保護成員,且其中有安全性顧慮的資訊
類別繼承許多虛擬成員,而且密封每一個成員的開發和測試成本遠比密封整個類別來得多
類別為需要透過反映 (Reflection) 快速搜尋的屬性;當擷取屬性時,密封屬性會提升反映的效能
不要在密封型別上宣告受保護成員或虛擬成員。
如果某個型別為密封,它不能有衍生類別。受保護成員只能從衍生類別來存取,而虛擬成員則只能在衍生類別中覆寫。
請考慮密封您要覆寫的成員。
您可以使用這個方法來確保衍生類別不會修改或略過目前類別和所有衍生類別所需的行為。
Portions Copyright 2005 Microsoft Corporation.All rights reserved.
Portions Copyright Addison-Wesley Corporation.All rights reserved.
如需設計方針的詳細資訊,請參閱由 Krzysztof Cwalina 和 Brad Abrams 所著,並由 Addison-Wesley 於 2005 年發行的「Framework 設計方針:可重複使用之 .NET 程式庫的慣例、慣用語法和模式」一書。