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

C# 介面完整指南:定義、實作、顯式實作與多重繼承

     編輯:關於C#

介面核心規則

  • 只有宣告,無實作;不可實例化。
  • 可包含:方法、屬性、事件、索引子。不可包含:欄位、建構函式、運算子、靜態成員 (C# 8 前)。
  • 成員隱含 public,不可加存取修飾詞。
  • 類別、結構、介面皆可繼承多個介面。
  • 實作介面的類別必須實作所有成員 (抽象類別除外)。
  • 實作成員必須為 public 且非靜態。

入門範例

interface ICalculator { int Calculate(int x, int y); }

class Add : ICalculator { public int Calculate(int x, int y) => x + y; }
class Subtract : ICalculator { public int Calculate(int x, int y) => x - y; }

var add = new Add();      // 5
var sub = new Subtract(); // 1
ICalculator c1 = new Add();
ICalculator c2 = new Subtract();

一個介面,多種實作 (策略模式雛形)

介面分離「做什麼」與「怎麼做」,支援執行時期切換演算法。

顯式實作:解決多介面同名衝突

interface I1 { void Method(); }
interface I2 { void Method(); }

class MyClass : I1, I2
{
    void I1.Method() { Console.WriteLine("I1"); }
    void I2.Method() { Console.WriteLine("I2"); }
}

// 呼叫必須轉型
I1 i1 = new MyClass(); i1.Method(); // I1
I2 i2 = new MyClass(); i2.Method(); // I2
// new MyClass().Method(); // 編譯錯誤:顯式實作成員不可透過類別實例存取

顯式實作進階用途

  1. 隱藏實作細節:不想讓類別使用者直接呼叫的介面成員 (如 IDisposable.Dispose)。
  2. 同名不同語意:不同介面定義同名方法但語意不同。
  3. 避免介面污染公開 API:保持類別介面乾淨。

介面繼承與預設實作 (C# 8+)

interface ILogger
{
    void Log(string msg);
    void LogError(string msg) => Log($"ERROR: {msg}"); // 預設實作
}

減少破壞性變更,但需謹慎使用 (鑽石繼承問題)。

最佳實踐

  • 介面隔離原則 (ISP):小而專一的介面優於大而全的介面。
  • 依賴倒置 (DIP):高層模組依賴抽象 (介面),不依賴具體實作。
  • 命名慣例:以 I 開頭 (IRepository、IService)。
  • 文件化契約:XML 註釋說明前置/後置條件、副作用、執行緒安全性。

總結

介面是 C# 達成低耦合、高內聚、可測試、可擴充架構的基石。掌握顯式實作、多重實作與預設實作,能靈活應對複雜領域建模與框架設計。

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