C#關鍵字掃盲——Interface 接口

Interface

Interface 官方描述:
1、接口只包含方法、屬性、事件或索引器的簽名。 實現接口的類或結構必須實現接口定義中指定的接口成員。
2、 一個接口可從一個或多個基接口繼承。
3、基類型列表包含基類和接口時,基類必須是列表中的第 1 項。(就是繼承列表中 基類需要寫在第一個位置,後面再寫接口)
4、實現接口的類可以顯式實現該接口的成員。 顯式實現的成員不能通過類實例訪問,而只能通過接口實例訪問。


項目源碼地址:https://gitee.com/michel4liu/LearnCSharp.git
項目:LearnInterface
環境VS2017 .NET Core2.0


官方描述的1、2 如下圖

官方描述的3如下圖

官方描述的4

有兩個作用
1、如果一個類實現的兩個接口包含簽名相同的成員,則在該類上實現此成員會導致這兩個接口將此成員用作其實現。

    interface IA
    {
        void Cc();
    }

    interface IB
    {
        void Cc();
    }

    class Xx : IA, IB
    {
        public void Cc()
        {
            Console.WriteLine($"{nameof(Xx)}.Cc"); 
        }
    }

    static void Main(string[] args)
    {
        Xx x = new Xx();
        x.Cc(); //輸出 Xx.Cc
    }

只能有一個實現,如果想實現不同的Cc方法 需要用顯示實現,如下

    class Xx : IA, IB
    {
        void IA.Cc()
        {
            Console.WriteLine($"{nameof(Xx)}.IA.Cc");
        }

        void IB.Cc()
        {
            Console.WriteLine($"{nameof(Xx)}.IB.Cc");
        }
    }

    static void Main(string[] args)
        {
            Xx x = new Xx();
            ((IA)x).Cc();  //輸出 Xx.IA.Cc
            ((IB)x).Cc();  //輸出 Xx.IB.Cc
        }

以上x對象中已經沒有Cc方法,必須用接口調用.

2、在框架中有時會用於解耦,要求必須依賴接口而非實現或接口


注意點

1、接口命名約定都是已大寫的’I’開頭

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章