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

介面成員完整圖譜:方法、屬性、索引子、事件的定義規則與存取約束

     編輯:關於C#

介面成員僅限四種類型:方法、屬性、索引子、事件。嚴禁常數、欄位、運算子、建構函式、解構函式、靜態成員。這種極簡契約設計,確保介面純粹表達「行為能力」而非「狀態儲存」。

成員定義語法範例


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 則非法,即使父介面有)。

實務提醒

  1. 介面成員不可為 static,但 C# 8+ 支援 static abstract(用於泛型數學介面)
  2. 事件在介面中僅宣告 event 關鍵字,不包含 add/remove 實現
  3. 索引子的 get/set 存取子不可單獨加修飾詞
  4. 使用 nameof(IExample.P) 獲取編譯期常數字串,重構安全
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved