介面成員僅限四種類型:方法、屬性、索引子、事件。嚴禁常數、欄位、運算子、建構函式、解構函式、靜態成員。這種極簡契約設計,確保介面純粹表達「行為能力」而非「狀態儲存」。
interface IExample {
// 索引子
string this[int index] { get; set; }
// 事件
event EventHandler E;
// 方法
void F(int value);
// 屬性
string P { get; set; }
}
public delegate void EventHandler(object sender, EventArgs e);
| 規則 | 說明 |
|---|---|
| 成員預設 public | 不可加任何修飾詞(abstract, virtual, override, static, private 等皆禁) |
| 同層級不得同名 | 但可定義與繼承成員同名的新成員(覆寫),建議加 new 抑制警告 |
| 無欄位/常數 | 介面不持有狀態,純行為契約 |
| 無靜態成員 | 介面實例化無意義,靜態成員屬於型別而非實例 |
| 無建構/解構函式 | 介面不可實例化 |
interface ISeq { int Count { get; set; } }
interface IRing { void Count(int i); }
interface IRingSeq : ISeq, IRing {}
class C {
void Test(IRingSeq rs) {
// rs.Count = 1; // 錯誤:歧義
((ISeq)rs).Count = 1; // 正確
((IRing)rs).Count(1); // 正確
}
}
格式:介面名.成員名。若介面在命名空間內,需包含命名空間:System.ICloneable.Clone。僅限介面中已宣告成員,如 ITextBox.Paint(若 ITextBox 未宣告 Paint 則非法,即使父介面有)。
static abstract(用於泛型數學介面)event 關鍵字,不包含 add/remove 實現get/set 存取子不可單獨加修飾詞nameof(IExample.P) 獲取編譯期常數字串,重構安全