from:http://www.vs2005.com/CSharp-VB.NET/10/1/default.aspx
第二節 定義接口
從技術上講,接口是一組包含了函數型方法的資料結構。通過這組資料結構,客戶代碼可以調用元件對象的功能。
定義接口的一般形式為:
[attributes]
[modifiers]
interface identifier [:base-list] {interface-body}[;]
說明:
1、attributes(可選):附加的定義性資訊。
2、modifiers(可選): 允許使用的修飾符有 new 和四個通路修飾符。分别是:new、public、protected、internal、 private。在一個接口定義中同一修飾符不允許出現多次,new 修飾符隻能出現在嵌套接口中,表示覆寫了繼承而來的同名成員。The public, protected, internal, and private 修飾符定義了對接口的通路權限。
3、訓示器和事件。
4、identifier:接口名稱。
5、base-list(可選):包含一個或多個顯式基接口的清單,接口間由逗号分隔。
6、interface-body:對接口成員的定義。
7、接口可以是命名空間或類的成員,并且可以包含下列成員的簽名: 方法、屬性、索引器 。
8、一個接口可從一個或多個基接口繼承。
接口這個概念在C#和Java中非常相似。接口的關鍵詞是interface,一個接口可以擴充一個或者多個其他接口。按照慣例,接口的名字以大寫字母"I"開頭。下面的代碼是C#接口的一個例子,它與Java中的接口完全一樣:
interface IShape {
void Draw ( ) ;
}
如果你從兩個或者兩個以上的接口派生,父接口的名字清單用逗号分隔,如下面的代碼所示:
interface INewInterface: IParent1, IParent2 { }
然而,與Java不同,C#中的接口不能包含域(Field)。另外還要注意,在C#中,接口内的所有方法預設都是公用方法。在Java中,方法定義可以帶有public修飾符(即使這并非必要),但在C#中,顯式為接口的方法指定public修飾符是非法的。例如,下面的C#接口将産生一個編譯錯誤。
interface IShape { public void Draw( ) ; }
下面的例子定義了一個名為IControl 的接口,接口中包含一個成員方法Paint:
interface IControl {
void Paint( ) ;
在下例中,接口 IInterface從兩個基接口 IBase1 和 IBase2 繼承:
interface IInterface: IBase1, IBase2 {
void Method1( ) ;
void Method2( ) ;
接口可由類實作。實作的接口的辨別符出現在類的基清單中。例如:
class Class1: Iface1, Iface2 {
// class 成員。
類的基清單同時包含基類和接口時,清單中首先出現的是基類。例如:
class ClassA: BaseClass, Iface1, Iface2 {
// class成員。
以下的代碼段定義接口IFace,它隻有一個方法:
interface IFace {
void ShowMyFace( ) ;
不能從這個定義執行個體化一個對象,但可以從它派生一個類。是以,該類必須實作ShowMyFace抽象方法:
class CFace:IFace
{
public void ShowMyFace( ) {
Console.WriteLine(" implementation " ) ;
}
基接口
一個接口可以從零或多個接口繼承,那些被稱為這個接口的顯式基接口。當一個接口有比零多的顯式基接口時,那麼在接口的定義中的形式為,接口辨別符後面跟着由一個冒号":"和一個用逗号","分開的基接口辨別符清單。
接口基:
:接口類型清單說明:
1、一個接口的顯式基接口必須至少同接口本身一樣可通路。例如,在一個公共接口的基接口中指定一個私有或内部的接口是錯誤的。
2、一個接口直接或間接地從它自己繼承是錯誤的。
3、接口的基接口都是顯式基接口,并且是它們的基接口。換句話說,基接口的集合完全由顯式基接口和它們的顯式基接口等等組成。在下面的例子中
interface ITextBox: IControl {
void SetText(string text) ;
interface IListBox: IControl {
void SetItems(string[] items) ;
interface IComboBox: ITextBox, IListBox { }
IComboBox 的基接口是IControl, ITextBox, 和 IlistBox。
4、一個接口繼承它的基接口的所有成員。換句話說,上面的接口 IComboBox 就像Paint一樣繼承成員SetText 和 SetItems。
5、一個實作了接口的類或結構也隐含地實作了所有接口的基接口。
接口主體
一個接口的接口主體定義接口的成員。
interface-body:
{ interface-member-declarationsopt }
定義接口主要是定義接口成員,請看下一節--定義接口成員。