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

C# 介面實現全機制:隱式/顯式實現、介面映射規則、繼承重寫與版本演進策略

     編輯:關於C#

介面定義「契約」,類別提供「履約」。C# 提供隱式與顯式兩種實現機制,配合精密的介面映射規則,支援複雜的多介面協作、鑽石繼承、版本演進等實戰場景。

隱式實現:預設公開契約


interface ISequence { object Add(); }
interface IRing { int Insert(object obj); }
class RingSequence : ISequence, IRing {
    public object Add() => ...;      // 隱式實現:public
    public int Insert(object obj) => ...;
}
  • 方法必須為 public、非靜態、簽名完全匹配
  • 類別實例與介面引用均可直接呼叫
  • 實現基介面方法時,隱式實現了所有父介面

顯式實現:封裝與衝突消解


class EditBox : IControl, IDataBound {
    void IControl.Paint() { ... }       // 僅能透過 IControl 引用呼叫
    void IDataBound.Bind(Binder b) { ... }
}
  • 語法:介面名.成員名,不可加存取修飾詞
  • 僅能透過介面引用呼叫:((IControl)edit).Paint(),edit.Paint() 編譯錯誤
  • 解決同名同簽名成員衝突(如 IControl.Paint vs IForm.Paint)
  • 隱藏實現細節,不污染類別公有 API

介面映射規則(優先序)

  1. 顯式介面成員實現體(完全匹配介面名+成員名)
  2. 非靜態公有成員(名稱、型別、參數表完全匹配)
  3. 遞迴搜尋直接/間接基類(同規則)
  4. 找不到 → 編譯錯誤

基類成員參與映射範例


interface I1 { void F(); }
class Base { public void F() {} }
class Derived : Base, I1 {} // Derived 繼承 Base.F 滿足 I1.F 映射

虛方法與介面分派

  • 隱式實現若為 virtual,衍生類 override 可改變介面行為(介面引用呼叫派發至衍生實現)
  • 顯式實現不能是 virtual,無法直接 override
  • 模式:顯式實現呼叫 protected virtual 方法,衍生類 override 該方法間接改變介面行為

介面重新實現

衍生類在基類列表再次列出介面,建立獨立映射,不受基類映射影響:


class Control : IControl { void IControl.Paint() => ...; }
class MyControl : Control, IControl { public void Paint() {} } // 新映射:IControl.Paint → MyControl.Paint

鑽石繼承共享實現


interface IControl { void Paint(); }
interface ITextBox : IControl { void SetText(string); }
interface IListBox : IControl { void SetItems(string[]); }
class ComboBox : IControl, ITextBox, IListBox {
    void IControl.Paint() { ... } // 單一實現共享給 ITextBox/IListBox 的 IControl 部分
    void ITextBox.SetText(string t) { ... }
    void IListBox.SetItems(string[] items) { ... }
}

版本演進最佳實踐

  1. 已發布介面不可修改,新增功能請定義新介面(IControlV2)
  2. 使用擴充方法為現有介面增加預設實現(C# 8+ 預設介面方法)
  3. 顯式實現保護內部演進自由度
  4. 組件強名稱簽署,啟用側向執行隔離版本

精通介面實現機制,是設計穩健、可擴展、版本容錯組件 API 的核心能力。

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