首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

抽象類別與介面的協作模式:部分實現、映射策略與設計抉擇

     編輯:關於C#

抽象類別與介面並非對立,而是協作關係。抽象類別可部分實現介面,將介面方法映射至 abstract 成員,強制衍生類完成具體實現,形成「契約下沉」的優雅模式。

模式一:映射至抽象成員


interface IMethods { void F(); void G(); }
abstract class C : IMethods {
    public abstract void F(); // 映射 IMethods.F
    public abstract void G(); // 映射 IMethods.G
}
// 所有非抽象衍生類必須 override F/G 提供實現

模式二:顯式實現呼叫受保護抽象方法


interface IMethods { void F(); void G(); }
abstract class C : IMethods {
    void IMethods.F() => FF(); // 顯式實現
    void IMethods.G() => GG();
    protected abstract void FF(); // 衍生類實現細節
    protected abstract void GG();
}

優勢:介面契約對外不可見(僅能透過 IMethods 引用呼叫),實現細節封裝在 protected 抽象方法中,衍生類聚焦核心邏輯。

關鍵限制

  • 顯式介面成員不能標記 abstract,但可呼叫 abstract 方法
  • 抽象類別實現介面時,未映射的介面成員會報錯,除非類別本身也是 abstract
  • abstract 與 override 可共用(表示重寫基類虛方法並保持抽象),但 abstract 不可與 virtual、sealed、static 共用

設計決策矩陣

場景推薦選擇理由
需要共享實現程式碼抽象類別可包含具體方法、欄位、建構函式
定義跨層級契約、支援多實現介面類別可實現多介面,介面支援多重繼承
需要版本演進(新增成員不破壞舊實現)介面 + 擴充方法C# 8+ default interface methods 或擴充方法
強制衍生類實現特定演算法骨架抽象類別 + Template Method封裝不變流程,延遲可變步驟至 abstract 方法
介面契約需對外隱藏、僅供內部協作顯式實現 + 抽象類別模式二,實現細節不洩露於公有 API

實務中常見組合:介面定義契約 → 抽象類別提供骨架/共享邏輯 → 具體類別完成實現,三層分工各司其職。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved