介面定義「契約」,類別提供「履約」。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)
interface I1 { void F(); }
class Base { public void F() {} }
class Derived : Base, I1 {} // Derived 繼承 Base.F 滿足 I1.F 映射
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) { ... }
}
IControlV2)精通介面實現機制,是設計穩健、可擴展、版本容錯組件 API 的核心能力。