C#介面

來源:互聯網
上載者:User

標籤:style   blog   http   color   os   ar   使用   sp   strong   

轉自:http://www.cnblogs.com/ArmyShen/archive/2012/09/04/2669809.html

***介面是對方法的抽象,而對象是對類的抽象

介面的規定:

(1)介面(interface)定義了一個可由類和結構實現的協定

(2)介面可以包含方法、屬性、事件和索引器

(3)所有介面都隱式具有public訪問屬性

(4)介面不能包含常量、欄位、運算子、建構函式、解構函式、類型

(5)介面不能包含abstract、public、protected、internal、private、virtual、override、static修飾符

(6)介面不提供它所定義的成員的具體實現

(7)一個類如果繼承了介面,那麼該類必須實現介面中的全部方法,包括這個介面的基底介面

(8)介面可以實現多重繼承

1、聲明一個介面

//interface關鍵字定義一個介面,通常以I + Name命名介面interface IMyInterface{    void fun();}

 

2、介面與其基類方法存在同名的問題

interface IMyFirstInterface{    void Func();}//Second繼承了Firstinterface IMySecondInterface : IMyFirstInterface{   //此時如果Second中具有和First中同名的方法,需要加new關鍵字   new void Func();}
//類A繼承了Second介面,那麼它也要實現Second所繼承的First介面中的方法class A:IMySecondInterface{
   //因為Second和First介面中的方法同名,所以此時First中的同名方法將被覆蓋,這裡實現的其實是Second中的方法 void Func() { }}public class Test{ static void Main() { A a = new A(); a.Func(); }}

 

3、顯示介面成員實現(解決2出現的同名覆蓋問題)

interface IMyFirstInterface{    void Func();}interface IMySecondInterface : IMyFirstInterface{   new void Func();}class A:IMySecondInterface{    //使用完全限定介面成員名作為標示符,可以解決繼承介面相同名稱覆蓋的問題,此時這種實現的介面並不屬於類的成員,僅是對介面方法的實現,所以不能使用public修飾其存取權限
  //實現的是First介面中的方法 void IMyFirstInterface.Func() { Console.WriteLine("First"); } //實現的是Second中的方法 void IMySecondInterface.Func() { Console.WriteLine("Second"); }}public class Test{ static void Main() { A a = new A();
     //在調用方法時,不能直接使用類的對象去調用其所實現的介面方法,只能顯示的使用介面名進行訪問,這也證實了這些方法不屬於類的本身 ((IMyFirstInterface)a).Func(); ((IMySecondInterface)a).Func(); }}

 

4、介面間的多重繼承

interface IA{    void F();}interface IB : IA{   new void F();}interface IC : IA{    void G();}interface ID : IB,IC{}class MyClass:ID{    //類繼承了ID介面,所以同時要實現ID所繼承的介面(IB,IC)中的方法    public void F()    {        Console.WriteLine("IB.F()");    }    public void G()    {    }}public class Test{    static void Main()    {        MyClass c = new MyClass();        c.F();//調用IB中的F()方法,因為類所繼承的ID介面同時繼承於IB介面        ((IA)c).F();//調用IB中的F()方法,ID首先會到它繼承的介面IB中尋找F()方法,雖然IA中存在同名方法,但此時IA中的同名方法被覆蓋,也就是說IB到IA的路徑被隱藏        ((IB)c).F();//調用IB中的F()方法,類本來就是對IB中的方法進行了實現        ((IC)c).F();//調用IB中的F()方法,多重繼承的直觀隱藏規則:如果成員在任何一個訪問路徑中被隱藏,那麼它在所有的訪問路徑中都被隱藏        ((ID)c).F();//調用IB中的F()方法,因為ID繼承了IB中的方法    }}

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.