一、接口定義
接口是指一組函數成員而不實現它們的引用類型,只能由類和結構來是實現,接口的作用就不闡述了
二、聲明接口
interface IMyInterface //interface 是關鍵字,后面的是接口名稱 { int DoSomething(int val1, int val2); //分號代表實現主體,不能含有public等修飾符,默認為public }
下面是一些注意事項:
a:接口聲明不能包括靜態成員和數據成員,只能包含非靜態成員方法、時間、屬性、索引器
b:函數成員的聲明不能有任何實現代碼,並且在每個聲明的主體后使用分號分隔
c: 接口成員可以使用public、private等修飾符,而接口成員是隱式public,不允許有任何訪問修飾符,包括public
d:按照慣例,接口名稱從大寫的 I 開始,如 ITest
e:如果類從基類繼承並使用了接口,基類必須放在接口之前(只能有一個基類,接口可以有多個)
f:接口可以繼承接口
三、接口和as運算符
IMyInter b = c as IMyInter; if(b != null) Console.WriteLine("Not null");
代碼先使用as運算符從類對象獲取接口引用,並賦值給b,使b的值為null 或 IMyInter,判斷是否為null
四、實現具有重復成員的接口
由於類可以實現任意數量的接口,因此可能有多個接口成員有相同的簽名和返回類型,例如:
interface IMyInter1 { void Print(string a); } interface IMyInter2 { void Print(string b); }
對於上面的例子,有兩種解決方法
1、實現單個成員來滿足所有包含重復成員的接口
class MyClass : IMyInter1, IMyInter2 { public void Print(sting s) { Console.WriteLine("value is {0}",s); } }
2.創建顯式接口成員實現,由接口名稱加點號分隔符和成員名稱組成
class MyClass : IMyInter1, IMyInter2 { public void IMyInter1.Print(sting s) { Console.WriteLine("IMyInter1 value is {0}",s); } public void IMyInter2.Print(sting s) { Console.WriteLine("IMyInter2 value is {0}",s); } }