CLR 不支援多重繼承,透過介面模擬。介面定義一組方法簽章的名稱。類別實作介面必須提供所有方法實作。抽象類別可將介面方法宣告為 abstract,留給衍生類別實作。
public,無需宣告。實作的介面方法必須標記為 public(IL 中為 virtual 和 sealed,不允許衍生類別覆寫)。若需允許覆寫,須顯式標記為 virtual。
執行期可將變數從一種介面類型轉型為另一種,前提是物件實作了這兩種介面。值類型實作介面時,轉為介面類型前必須先裝箱(介面變數必須參考堆上物件)。
public。private),僅能透過介面變數存取。不可標記為 virtual,不可被覆寫。public interface ITest { void Test(); }
public class TestClass : ITest {
public void Test() { Console.WriteLine("1"); }
void ITest.Test() { Console.WriteLine("2"); }
}
TestClass t = new TestClass();
t.Test(); // 輸出 1
ITest it = (ITest)t;
it.Test(); // 輸出 2
IComparable<Int32> 直接接受 Int32,拒絕 String。針對非泛型介面,以 EIMI 實作型別安全的強類型方法,並將介面方法轉呼叫強類型方法。
| 類別繼承 | 介面 |
|---|---|
| 表示 IS-A | 表示 CAN-DO |
| 易用,不必提供所有實作 | 無上述優點 |
| 可 override/new 覆寫 | |
| 易於在基底類別新增成員 |
值類型繼承自 System.ValueType,只能使用介面。FCL 集合基於介面,因各集合間極少共享程式碼。