C#易錯易混淆知識總結(八)--{介面}
阿新 • • 發佈:2022-04-06
一 介面
對於介面來說,C#是有規定使用Interface關鍵字來宣告介面。它的宣告是和類一致的。可以說介面就是一個特殊的抽象類。如下程式碼:
class Program { static void Main(string[] args) { } } //宣告一個可以飛的介面 interface IRunable { //包含可以被繼承的子類實現的方法 void Run(); }
由以前的抽象類的知識可以知道,抽象類是沒有辦法例項化的(因為含有抽象成員,而抽象成員不含有方法體)。那麼介面可不可以例項化呢?答案是肯定的,不能例項化。
二,介面可以定義哪些成員
1)介面就是一個定義“具有某種能力的抽象類”,既然介面是類,那麼它的內部可以定義哪些成員呢?
首先,在普通的類中,可以有欄位,屬性,方法,索引器,抽象方法等等。那麼介面呢?
看下面直接宣告欄位,編譯器會報錯,告訴我們介面內不能宣告欄位
既然介面內不能有欄位,那也就不存在封裝欄位了。所以上邊圖示的封裝欄位的程式碼也是錯誤的。
同理由上面的程式碼也可以知道,在介面中是不可以定義顯式的屬性(因為在屬性中要操作欄位賦值,但是欄位沒有辦法在介面中宣告)。
那麼介面可以宣告自動屬性麼?看下面的程式碼:
//宣告一個可以飛的介面 interface IRunable {//宣告欄位 int nAge { get; set; } string strName { get; set; } ////包含可以被繼承的子類實現的方法 void Run(); }
程式碼可以順利編譯通過,那麼是為什麼呢?這就要看.NET的原始碼,我把原始碼編譯後的比較結果如下圖: