sealed class 在類別宣告加上 sealed,徹底禁止繼承。這是架構層級的「最終形態」宣告。
sealed class 不可作為基類:class C : SealedClass → 編譯錯誤sealed 與 abstract 互斥:抽象類別旨在被繼承,密封類別旨在不被繼承sealed 關鍵字
abstract class AlgorithmBase {
public abstract void Execute();
}
// 具體演算法實現:語義完整、無擴展需求、效能敏感
public sealed class AesEncryption : AlgorithmBase {
public override void Execute() {
// AES 核心實現... 密封確保演算法純粹性
}
}
// 嘗試繼承 → 編譯錯誤
// class MyAes : AesEncryption {} // 錯誤:無法從密封類別衍生
// 密封類別虛方法調用
sealed class SealedDemo {
public virtual void Work() => Compute();
}
// 非密封類別
class NonSealedDemo {
public virtual void Work() => Compute();
}
// Benchmark: SealedDemo.Work 經 JIT 內聯,NonSealedDemo.Work 保留虛呼叫
// 微基準測試顯示 10-20% 呼叫開銷差異(視內容而定)
預設密封,按需開放。 除非明確設計為可繼承(加
virtual/abstract、文檔化繼承契約),否則類別應預設sealed。這符合「開閉原則」對擴展點的精準控制。
密封類別可實現介面:
public sealed class JsonSerializer : ISerializer {
public string Serialize(object obj) => JsonSerializer.Serialize(obj);
}
此模式常見於:實現介面契約、但不希望被繼承修改行為的工具類。
善用 sealed class,是架構師控制繼承邊界、榨乾效能、守護語義純粹性的關鍵手段。