▪️.Net - 特殊修飾詞
2025-3-18
| 2025-3-19
字數 1643閱讀時間 5 分鐘

sealed


定義:阻止類別被繼承或阻止虛擬方法被進一步覆寫。
特性
  • 應用於類別時,防止其他類別繼承該類別
  • 應用於覆寫方法時,防止衍生類別進一步覆寫該方法
使用時機
  • 確保類別行為不被修改或擴展
  • 防止安全相關邏輯被覆寫
  • 優化性能(編譯器可以進行優化,因為知道不會有進一步的多型行為)
示例
優點:增強安全性、明確設計意圖、提供潛在性能優化 缺點:降低代碼擴展性和靈活性

abstract


定義:宣告必須在衍生類別中實作的成員,或宣告不能直接實例化的類別。
特性
  • 抽象類別不能被直接實例化
  • 抽象成員沒有實作,必須由衍生類別提供實作
  • 含有抽象成員的類別必須被宣告為抽象類別
使用時機
  • 建立通用基礎類別,定義子類需實作的行為
  • 定義框架結構,強制實作特定方法
  • 當類別有部分功能已實作,但需要子類完成其他功能時
示例
優點:提供清晰的通用結構,確保子類別實作必要行為 缺點:增加類別階層複雜度,可能造成繼承鏈過深

virtual


定義:宣告可被衍生類別覆寫的方法、屬性、索引器或事件。
特性
  • 基礎類別提供預設實作
  • 衍生類別可以選擇覆寫(不強制)
  • 實現多型行為的基礎
使用時機
  • 提供預設行為,但允許客製化
  • 啟用多型功能
  • 建立框架時,提供擴展點
示例
優點:啟用多型,增加代碼靈活性,提供擴展點 缺點:需要仔細設計以避免過度使用,可能增加運行時複雜度

override


定義:提供衍生類的新實作。
特性
  • 必須覆寫標記為 virtual、abstract 或已被覆寫的成員
  • 訪問修飾詞必須與被覆寫成員相同
  • 返回類型必須與被覆寫成員相容
使用時機
  • 實作抽象成員
  • 修改或擴展基礎類別的虛擬行為
  • 參與多型鏈
示例
優點:實現多型,客製化基礎類別行為 缺點:增加類間依賴,可能使繼承關係複雜

readonly


定義:宣告一個只能在宣告時或在構造函數中設定的成員變數。
特性
  • 宣告後,值只能在初始化或構造函數中設定
  • 運行時(執行期)為常數,但可以在每個實例化時有不同值
  • 可以應用於實例和靜態欄位
使用時機
  • 建立執行期常數
  • 確保不可變性
  • 保護配置和敏感資料不被修改
示例
優點:增強不可變性,確保程式碼安全性,明確意圖 缺點:限制靈活性,初始化後不能修改

存取修飾詞與特殊修飾詞的組合使用


特殊修飾詞可以與存取修飾詞組合使用,實現更精細的控制:

特殊修飾詞的實用技巧


1. 類別設計層次

  • 抽象類別 設計原則:
    • 定義介面,強調契約和規範
    • 可以實作共用功能
    • 規劃為被繼承,不能被實例化
  • 密封類別 設計原則:
    • 防止被修改的完整實作
    • 標記為最終行為
    • 不規劃進一步擴展

2. virtual vs abstract 選擇指南

  • 當基礎行為有合理預設實作時,使用 virtual
  • 當衍生類別必須提供實作且沒有合理預設時,使用 abstract
  • 混合使用時,抽象類別可同時包含抽象和虛擬成員

3. readonly 與常量選擇

  • const 在編譯時求值,readonly 在執行期求值
  • 需要為每個實例設置不同值時,使用 readonly
  • 全局固定的值則使用 const
  • Dotnet
  • Angualr - @Pipe.Net - 存取修飾詞
    Loading...