密封類 vs 密封成員
- 使用
sealed修飾符 - 防止類繼承、防止派生類重寫
sealed修飾符不僅可以用來修飾class,同樣也可以修飾類成員
它可以防止當前類被繼承,或者防止派生類(子類)在繼承過程中重寫某一個方法,sealed 修飾符不僅可以用來修飾class,同樣也可以修飾類的成員。
- 如果
sealed關鍵字使用在class上,這個類將無法被別人繼承 - 如果
sealed關鍵字使用在成員方法上,方法將無法被重寫
例如:Circle類加上 sealed關鍵字,那麼這個Circle就不能被其他的 class 繼承了
1
2
3
4
5
public sealed class Circle:Shape {
public void Draw() {
......
}
}
或者,我們也可以把sealed修飾符加在它的方法上,這個時候其他的class 在繼承 circle的時候,就不可以重寫Draw這個方法了
1
2
3
4
5
public class Circle:Shape {
public sealed void Draw() {
......
}
}
所以,sealed修飾符跟abstract修飾符剛好相反。
※ 套用至方法或屬性時,sealed 修飾詞必須一律與 override 搭配使用。 MSDN - keywords/sealed
為什麼要使用 sealed
TODO…
可以使用 sealed 的場景
- 靜態類
- 需要儲存敏感的數據
- 虛方法太多,重寫的代價過高的時候
- 追求性能提升 (???)
從來沒用過 sealed… XDDD