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’開頭