第三節 定義介面成員
介面可以包含乙個和多個成員,這些成員可以是方法、屬性、索引指示器和事件,但不能是常量、域、操作符、建構函式或析構函式,而且不能包含任何靜態成員。介面定義建立新的定義空間,並且介面定義直 接包含的介面成員定義將新成員引入該定義空間。
說明:
1、介面的成員是從基介面繼承的成員和由介面本身定義的成員。
2、介面定義可以定義零個或多個成員。介面的成員必須是方法、屬性、事件或索引器。介面不能包含常數、字段、運算子、例項建構函式、析構函式或型別,也不能包含任何種類的靜態成員。
3、定義乙個介面,該介面對於每種可能種類的成員都包含乙個:方法、屬性、事件和索引器。
4、介面成員預設訪問方式是public。介面成員定義不能包含任何修飾符,比如成員定義前不能加abstract,public,protected,internal,private,virtual,override 或static 修飾符。
5、介面的成員之間不能相互同名。繼承而來的成員不用再定義,但介面可以定義與繼承而來的成員同名的成員,這時我們說介面成員覆蓋了繼承而來的成員,這不會導致錯誤,但編譯器會給出乙個警告。關閉警告提示的方式是在成員定義前加上乙個new關鍵字。但如果沒有覆蓋父介面中的成員,使用new 關鍵字會導致編譯器發出警告。
6、方法的名稱必須與同一介面中定義的所有屬性和事件的名稱不同。此外,方法的簽名必須與同一介面中定義的所有其他方法的簽名不同。
虛擬主機
7、屬性或事件的名稱必須與同一介面中定義的所有其他成員的名稱不同。
8、乙個索引器的簽名必須區別於在同一介面中定義的其他所有索引器的簽名。
9、介面方法宣告中的屬性(attributes), 返回型別(return-type), 識別符號(identifier), 和形式引數列表(formal-parameter-lis)與乙個類的方法宣告中的那些有相同的意義。乙個介面方法宣告不允許指定乙個方法主體,而宣告通常用乙個分號結束。
10、介面屬性宣告的訪問符與類屬性宣告的訪問符相對應,除了訪問符主體通常必須用分號。因此,無論屬性是讀寫、唯讀或只寫,訪問符都完全確定。
11、介面索引宣告中的屬性(attributes), 型別(type), 和形式引數列表 (formal-parameter-list)與類的索引宣告的那些有相同的意義。
下面例子中介面imytest包含了索引指示器、事件e、 方法f、 屬性p 這些成員:
inte***ce imytest
event eventhandler e ;
void f(int value) ;
string p
} public delegate void eventhandler(object sender, eventargs e) ;
下面例子中介面istringlist包含每個可能型別成員的介面:乙個方法,乙個屬性,乙個事件和乙個索引。
public delegate void stringlistevent(istringlist sender);
public inte***ce istringlist
event stringlistevent changed;
string this[int index]
} 介面成員的全權名
使用介面成員也可採用全權名(fully qualified name)。介面的全權名稱是這樣構成的。介面名加小圓點"." 再跟成員名比如對於下面兩個介面:
inte***ce icontrol
inte***ce itextbox: icontrol
其中paint 的全權名是icontrol.paint,gettext的全權名是itextbox. gettext。當然,全權名中的成員名稱必須是在介面中已經定義過的,比如使用itextbox.paint.就是不合理的。
如果介面是名字空間的成員,全權名還必須包含名字空間的名稱。
虛擬主機
namespace system }
那麼clone方法的全權名是system. idatatable.clone。
定義好了介面,接下來就是怎樣訪問介面,請看下一節--訪問介面
基於C 的介面基礎教程之三
第三節 定義介面成員 介面可以包含乙個和多個成員,這些成員可以是方法 屬性 索引指示器和事件,但不能是常量 域 操作符 建構函式或析構函式,而且不能包含任何靜態成員。介面定義建立新的定義空間,並且介面定義直 接包含的介面成員定義將新成員引入該定義空間。說明 1 介面的成員是從基介面繼承的成員和由介面...
基於C 的介面基礎教程之三
inte ceimytest eventeventhandlere voidf intvalue stringp publicdelegatevoideventhandler objectsender,eventargse publicdelegatevoidstringlistevent istr...
基於C 的介面基礎教程之七
inte ceimethods abstractclassc imethods 這裡,imethods的實現函式把f和g對映到抽象方法中,它們必須在從c派生的非抽象類中被覆蓋。注意顯式介面成員實現函式不能是抽象的,但是顯式介面成員實現函式當然可以呼叫抽象方法。例如 inte ceimethods a...