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(); // 編譯錯誤:顯式實作成員不可透過類別實例存取
IDisposable.Dispose)。interface ILogger
{
void Log(string msg);
void LogError(string msg) => Log($"ERROR: {msg}"); // 預設實作
}
減少破壞性變更,但需謹慎使用 (鑽石繼承問題)。
I 開頭 (IRepository、IService)。介面是 C# 達成低耦合、高內聚、可測試、可擴充架構的基石。掌握顯式實作、多重實作與預設實作,能靈活應對複雜領域建模與框架設計。