C# 介面

來源:互聯網
上載者:User

標籤:tool   .com   gif   相同   寫法   有一個   託管   直接   查看   

1.介面的特點

  介面的定義是指定一組函數成員而不實現成員的參考型別,其它類型和介面可以繼承介面。定義還是很好理解的,但是沒有反映特點,介面主要有以下特點:

(1)通過介面可以實現多重繼承,C#介面的成員不能有public、protected、internal、private等修飾符。原因很簡單,介面裡面的方法都需要由外面介面實現去實現方法體,那麼其修飾符必然是public。C#介面中的成員預設是public的,java中是可以加public的。

(2)介面成員不能有new、static、abstract、override、virtual修飾符。有一點要注意,當一個介面實現一個介面,這2個介面中有相同的方法時,可用new關鍵字隱藏父介面中的方法。

(3)介面中只包含成員的簽名,介面沒有建構函式,所有不能直接使用new對介面進行執行個體化。介面中只能包含方法、屬性、事件和索引的組合。介面一旦被實現,實作類別必須實現介面中的所有成員,除非實作類別本身是抽象類別。

(4)C#是單繼承,介面是解決C#裡面類可以同時繼承多個基類的問題。

2.介面的簡單使用

 class Program    {        static void Main(string[] args)        {            IWorker james1 = new James1();            IWorker james2 = new James2();            james1.work("設計");            james2.work("編程");            //從這個例子我體會到了有介面的好處,可以想象如果又來了新的員工。            //如果不採用介面,而是每個員工都有一個單獨的類,這樣就會容易出錯。            //如果有介面這種協議約束的話,那麼只要實現了介面就肯定有介面裡聲明的方法,我們只需拿來調用。        }    }    public interface IWorker{ void work(string s); }    class James1 : IWorker    {        public void work(string s)        {            Console.WriteLine("我的名字是James1,我的工作是" +s);        }    }    class James2 : IWorker    {        public void work(string s)        {            Console.WriteLine("我的名字是James2,我的工作是"+s);        }    }

3.一個可以執行個體化介面的特例

    class Program    {        static void Main(string[] args)        {            //C#中COM介面是可以執行個體化的,但其實這種寫法是使介面“映射”到某一個類上,實際上建立的是這個類的執行個體。            IWorker worker = new IWorker();        }    }    [ComImport, CoClass(typeof(James1))]    [Guid("d60908eb-fd5a-4d3c-9392-8646fcd1edce")]    public interface IWorker{ void work(string s); }    //ComImport特性發生在tlbimp.exe匯入COM類型類庫的時候,產生的託管類型會標記有ComImport特性    //Guid特性是一個GUID標識,COM類型是用GUID來標識的。

利用.NET Reflector查看時可以很明顯的看到Main方法裡面的代碼是:IWorker worker=new James1();

 4.介面和抽象類別的區別

介面用於規範,抽象類別用於共性。抽象類別是類,所以只能被單繼承,但是介面卻可以一次實現多個。
介面中只能聲明方法,屬性,事件,索引器。而抽象類別中可以有方法的實現,也可以定義非靜態類變數。
抽象類別可以提供某些方法的部分實現,介面不可以。抽象類別的執行個體是它的子類給出的。介面的執行個體是實現介面的類給出的。
在抽象類別中加入一個方法,那麼它的子類就同時有了這個方法。而在介面中加入新的方法,那麼實現它的類就要重新編寫(這就是為什麼說介面是一個類的規範了)。
介面成員被定義為公用的,但抽象類別的成員也可以是私人的、受保護的、內部的或受保護的內部成員(其中受保護的內部成員只能在應用程式的代碼或衍生類別中訪問)。此外介面不能包含欄位、建構函式、解構函式、靜態成員或常量。

  還有一點,我們在VS中實現介面時會發現有2個選項,一個是實現介面,一個是顯示實現介面。實現介面就是我們平常理解的實現介面,而顯示實現介面的話,實現的方法是屬於介面的,而不是屬於實作類別的。

 

C# 介面

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.