1. 程式人生 > 其它 >C#易錯易混淆知識總結(八)--{介面}

C#易錯易混淆知識總結(八)--{介面}

一 介面

對於介面來說,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的原始碼,我把原始碼編譯後的比較結果如下圖: