C#接口

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

***接口是對方法的抽象,而對象是對類的抽象ide

接口的規定:函數

(1)接口(interface)定義了一個可由類和結構實現的協定post

(2)接口能夠包含方法、屬性、事件和索引器spa

(3)全部接口都隱式具備public訪問屬性code

(4)接口不能包含常量、字段、運算符、構造函數、析構函數、類型htm

(5)接口不能包含abstract、public、protected、internal、private、virtual、override、static修飾符對象

(6)接口不提供它所定義的成員的具體實現blog

(7)一個類若是繼承了接口,那麼該類必須實現接口中的所有方法,包括這個接口的基接口繼承

(8)接口能夠實現多重繼承

一、聲明一個接口

//interface關鍵字定義一個接口,一般以I + Name命名接口 interface IMyInterface { void fun(); }

 

二、接口與其基類方法存在同名的問題

複製代碼
interface IMyFirstInterface { void Func(); } //Second繼承了First interface 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(); } }
複製代碼

 

三、顯示接口成員實現(解決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(); } }
複製代碼

 

四、接口間的多重繼承

複製代碼
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中的方法  } }

複製代碼
相關文章
相關標籤/搜索