介面定義一組契約:方法、屬性、事件、索引子的簽名,不包含任何實作。它是「能做什麼」的規範,而非「怎麼做」。
MSDN 定義:介面只包含方法、委派或事件的簽名。實作由實作介面的類別完成。
軟體設計核心原則:面向介面程式設計,依賴抽象而非具體。
public interface IPlayer
{
string GetName(); // 方法簽名
string Show(); // 方法簽名
// 也可定義屬性、事件、索引子
string NickName { get; set; }
event EventHandler OnPlay;
string this[int index] { get; }
}
介面屬性只宣告存取子,不含欄位與邏輯:
// 介面
public interface INamed
{
string Name { get; set; }
}
// 實作
public class Person : INamed
{
private string _name;
public string Name
{
get => _name;
set => _name = value?.Trim() ?? string.Empty;
}
}
「介面是多此一舉,直接用類別不就好?」
錯。介面讓高層模組不依賴低層細節。若 `Game` 直接依賴 `Grandpa`、`Grandson` 具體類別,新增玩家類型就得修改 `Game`,違反開放封閉原則。
掌握介面定義後,接著學習: