第三節 定義接口成員
接口可以包含一個和多個成員這些成員可以是方法屬性索引指示器和事件但不能是常量域操作符構造函數或析構函數而且不能包含任何靜態成員接口定義創建新的定義空間並且接口定義直 接包含的接口成員定義將新成員引入該定義空間
說明
接口的成員是從基接口繼承的成員和由接口本身定義的成員
接口定義可以定義零個或多個成員接口的成員必須是方法屬性事件或索引器接口不能包含常數字段運算符實例構造函數析構函數或類型也不能包含任何種類的靜態成員
定義一個接口該接口對於每種可能種類的成員都包含一個方法屬性事件和索引器
接口成員默認訪問方式是public接口成員定義不能包含任何修飾符比如成員定義前不能加abstractpublicprotectedinternalprivatevirtualoverride 或static 修飾符
接口的成員之間不能相互同名繼承而來的成員不用再定義但接口可以定義與繼承而來的成員同名的成員這時我們說接口成員覆蓋了繼承而來的成員這不會導致錯誤但編譯器會給出一個警告關閉警告提示的方式是在成員定義前加上一個new關鍵字但如果沒有覆蓋父接口中的成員使用new 關鍵字會導致編譯器發出警告
方法的名稱必須與同一接口中定義的所有屬性和事件的名稱不同此外方法的簽名必須與同一接口中定義的所有其他方法的簽名不同
屬性或事件的名稱必須與同一接口中定義的所有其他成員的名稱不同
一個索引器的簽名必須區別於在同一接口中定義的其他所有索引器的簽名
接口方法聲明中的屬性(attributes) 返回類型(returntype) 標識符(identifier) 和形式參數列表(formalparameterlis)與一個類的方法聲明中的那些有相同的意義一個接口方法聲明不允許指定一個方法主體而聲明通常用一個分號結束
接口屬性聲明的訪問符與類屬性聲明的訪問符相對應除了訪問符主體通常必須用分號因此無論屬性是讀寫只讀或只寫訪問符都完全確定
接口索引聲明中的屬性(attributes) 類型(type) 和形式參數列表 (formalparameterlist)與類的索引聲明的那些有相同的意義
下面例子中接口IMyTest包含了索引指示器事件E 方法F 屬性P 這些成員
interface IMyTest
{
string this[int index] { get; set; }
event EventHandler E ;
void F(int value) ;
string P { get; set; }
}
public delegate void EventHandler(object sender EventArgs e) ;
下面例子中接口IStringList包含每個可能類型成員的接口一個方法一個屬性一個事件和一個索引
public delegate void StringListEvent(IStringList sender);
public interface IStringList
{
void Add(string s);
int Count { get; }
event StringListEvent Changed;
string this[int index] { get; set; }
}
接口成員的全權名
使用接口成員也可采用全權名(fully qualified name)接口的全權名稱是這樣構成的接口名加小圓點 再跟成員名比如對於下面兩個接口
interface IControl
{
void Paint( ) ;
}
interface ITextBox: IControl
{
void GetText(string text) ;
}
其中Paint 的全權名是IControlPaintGetText的全權名是ITextBox GetText當然全權名中的成員名稱必須是在接口中已經定義過的比如使用ITextBoxPaint就是不合理的
如果接口是名字空間的成員全權名還必須包含名字空間的名稱
namespace System
{
public interface IDataTable
{
object Clone( ) ;
}
}
那麼Clone方法的全權名是System IDataTableClone
定義好了接口接下來就是怎樣訪問接口請看下一節訪問接口
From:http://tw.wingwit.com/Article/program/net/201311/15738.html