基于C#的接口基礎(chǔ)圖文說明教程之3
發(fā)表時間:2024-06-12 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]第三節(jié) 定義接口成員 接口可以包含一個和多個成員,這些成員可以是方法、屬性、索引指示器和事件,但不能是常量、域、操作符、構(gòu)造函數(shù)或析構(gòu)函數(shù),而且不能包含任何靜態(tài)成員。接口定義創(chuàng)建新的定義空間,并且接口定義直 接包含的接口成員定義將新成員引入該定義空間! ≌f明: 1、接口的成員是從基接口繼承的...
第三節(jié) 定義接口成員
接口可以包含一個和多個成員,這些成員可以是方法、屬性、索引指示器和事件,但不能是常量、域、操作符、構(gòu)造函數(shù)或析構(gòu)函數(shù),而且不能包含任何靜態(tài)成員。接口定義創(chuàng)建新的定義空間,并且接口定義直 接包含的接口成員定義將新成員引入該定義空間。
說明:
1、接口的成員是從基接口繼承的成員和由接口本身定義的成員。
2、接口定義可以定義零個或多個成員。接口的成員必須是方法、屬性、事件或索引器。接口不能包含常數(shù)、字段、運算符、實例構(gòu)造函數(shù)、析構(gòu)函數(shù)或類型,也不能包含任何種類的靜態(tài)成員。
3、定義一個接口,該接口對于每種可能種類的成員都包含一個:方法、屬性、事件和索引器。
4、接口成員默認(rèn)訪問方式是public。接口成員定義不能包含任何修飾符,比如成員定義前不能加abstract,public,protected,internal,private,virtual,override 或static 修飾符。
5、接口的成員之間不能相互同名。繼承而來的成員不用再定義,但接口可以定義與繼承而來的成員同名的成員,這時我們說接口成員覆蓋了繼承而來的成員,這不會導(dǎo)致錯誤,但編譯器會給出一個警告。關(guān)閉警告提示的方式是在成員定義前加上一個new關(guān)鍵字。但如果沒有覆蓋父接口中的成員,使用new 關(guān)鍵字會導(dǎo)致編譯器發(fā)出警告。
6、方法的名稱必須與同一接口中定義的所有屬性和事件的名稱不同。此外,方法的簽名必須與同一接口中定義的所有其他方法的簽名不同。
7、屬性或事件的名稱必須與同一接口中定義的所有其他成員的名稱不同。
8、一個索引器的簽名必須區(qū)別于在同一接口中定義的其他所有索引器的簽名。
9、接口方法聲明中的屬性(attributes), 返回類型(return-type), 標(biāo)識符(identifier), 和形式參數(shù)列表(formal-parameter-lis)與一個類的方法聲明中的那些有相同的意義。一個接口方法聲明不允許指定一個方法主體,而聲明通常用一個分號結(jié)束。
10、接口屬性聲明的訪問符與類屬性聲明的訪問符相對應(yīng),除了訪問符主體通常必須用分號。因此,無論屬性是讀寫、只讀或只寫,訪問符都完全確定。
11、接口索引聲明中的屬性(attributes), 類型(type), 和形式參數(shù)列表 (formal-parameter-list)與類的索引聲明的那些有相同的意義。
下面例子中接口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; }
}
接口成員的全權(quán)名
使用接口成員也可采用全權(quán)名(fully qualified name)。接口的全權(quán)名稱是這樣構(gòu)成的。接口名加小圓點"." 再跟成員名比如對于下面兩個接口:
interface IControl {
void Paint( ) ;
}
interface ITextBox: IControl {
void GetText(string text) ;
}
其中Paint 的全權(quán)名是IControl.Paint,GetText的全權(quán)名是ITextBox. GetText。當(dāng)然,全權(quán)名中的成員名稱必須是在接口中已經(jīng)定義過的,比如使用ITextBox.Paint.就是不合理的。
如果接口是名字空間的成員,全權(quán)名還必須包含名字空間的名稱。
namespace System
{
public interface IDataTable {
object Clone( ) ;
}
}
那么Clone方法的全權(quán)名是System. IDataTable.Clone。
定義好了接口,接下來就是怎樣訪問接口,請看下一節(jié)--訪問接口