C#中的接口
在C#中接口是一組公共方法或屬性的集合。接口可以被其他接口或是類繼承,但不能被實例化。
1、接口中包含的屬性和方法都是公共的,不是繼承或是私有的。事實上,在C#中定義接口中的成員時,不允許顯示指定接口成員的可訪問性,而是自動默認為公共的。
2、接口中只能包含普通方法或屬性,而不能包含其他內容,如構造函數、變量等。
3、當接口被某個類繼承時,通常說類實現了這個接口,而較少說類繼承了接口。
4、接口中的方法和屬性只有簽名部分,而沒有實現部分,甚至連接口名後面的大括號也不能有,否則會出現編譯錯誤。
在C#中用interface關鍵字定義一個接口
訪問修飾符 interface 接口名
{
//接口成員(方法和屬性)
}
C#中約定接口的名字以字母I開頭。如以下代碼定義一個接口IPerson
public interface IPerson { void eat(object food); //接口的方法 void speak(string text); //接口的方法 string name //接口的屬性 { get; set; } }
如前所述,接口中不允許定義變量、構造函數,不能顯示指定接口中方法或屬性的可訪問性。
接口可以被類或者別的接口繼承。類繼承接口的語法與類繼承類的語法相同,都是在類名後面加冒號和要繼承的接口名,如下:
訪問修飾符 class 類名:接口名
{
//類與接口的成員
}
類繼承接口與類繼承類的不同之處在於一個類可以同時繼承多個接口,但只能從一個類繼承。當一個類繼承多個接口時,多個接口之間用逗號隔開,如下:
訪問修飾符 class 類名:[基類名][,接口1][,接口2][...][,接口n]
{
//類與接口成員
}
接口繼承接口與類繼承接口語法類似,只是定義接口時使用關鍵字interface。
訪問修飾符 interface 接口名:[接口1][,接口2][,接口3][...][,接口n]
{
//接口成員
}
如果一個類從接口繼承,那麼這個類必須要實現接口中定義的所有方法和屬性。由於接口定義了方法和屬性的簽名,而這些方法和屬性的具體實現代碼是在從接口繼承的類裡寫,所以當一個類從接口繼承時,通常說一個類實現了某個接口。
這裡所說的實現有兩層含義:首先說明類繼承於接口,其次,類中用代碼實現了接口中定義的方法和屬性。
如果一個類實現了一個接口,由於類繼承自接口,所以類可以隱式轉換為接口,這與派生類向基類隱式轉換是一樣的。如果一個類實現了多個接口,那麼類可以隱式轉換為其中任意一個接口。