第二節 定義接口
從技術上講接口是一組包含了函數型方法的數據結構通過這組數據結構客戶代碼可以調用組件對象的功能
定義接口的一般形式為
[attributes] [modifiers] interface identifier [:baselist] {interfacebody}[;]
說明
attributes(可選)附加的定義性信息
modifiers(可選) 允許使用的修飾符有 new 和四個訪問修飾符分別是newpublicprotectedinternal private在一個接口定義中同一修飾符不允許出現多次new 修飾符只能出現在嵌套接口中表示覆蓋了繼承而來的同名成員The public protected internal and private 修飾符定義了對接口的訪問權限
指示器和事件
identifier接口名稱
baselist(可選):包含一個或多個顯式基接口的列表接口間由逗號分隔
interfacebody對接口成員的定義
接口可以是命名空間或類的成員並且可以包含下列成員的簽名 方法屬性索引器
一個接口可從一個或多個基接口繼承
接口這個概念在C#和Java中非常相似接口的關鍵詞是interface一個接口可以擴展一個或者多個其他接口按照慣例接口的名字以大寫字母I開頭下面的代碼是C#接口的一個例子它與Java中的接口完全一樣
interface IShape {void Draw ( ) ;}
如果你從兩個或者兩個以上的接口派生父接口的名字列表用逗號分隔如下面的代碼所示
interface INewInterface: IParent IParent { }
然而與Java不同C#中的接口不能包含域(Field)另外還要注意在C#中接口內的所有方法默認都是公用方法在Java中方法定義可以帶有public修飾符(即使這並非必要)但在C#中顯式為接口的方法指定public修飾符是非法的例如下面的C#接口將產生一個編譯錯誤
interface IShape { public void Draw( ) ; }
下面的例子定義了一個名為IControl 的接口接口中包含一個成員方法Paint
interface IControl {void Paint( ) ;}
在下例中接口 IInterface從兩個基接口 IBase 和 IBase 繼承
interface IInterface: IBase IBase
{
void Method( ) ;
void Method( ) ;
}
接口可由類實現實現的接口的標識符出現在類的基列表中例如
class Class: Iface Iface {// class 成員}
類的基列表同時包含基類和接口時列表中首先出現的是基類例如
class ClassA: BaseClass Iface Iface {// class成員}
以下的代碼段定義接口IFace它只有一個方法
interface IFace {void ShowMyFace( ) ;}
不能從這個定義實例化一個對象但可以從它派生一個類因此該類必須實現ShowMyFace抽象方法
class CFace:IFace
{
public void ShowMyFace( )
{
ConsoleWriteLine( implementation ) ;
}
}
基接口
一個接口可以從零或多個接口繼承那些被稱為這個接口的顯式基接口當一個接口有比零多的顯式基接口時那麼在接口的定義中的形式為接口標識符後面跟著由一個冒號:和一個用逗號分開的基接口標識符列表
接口基
接口類型列表說明
一個接口的顯式基接口必須至少同接口本身一樣可訪問例如在一個公共接口的基接口中指定一個私有或內部的接口是錯誤的
一個接口直接或間接地從它自己繼承是錯誤的
接口的基接口都是顯式基接口並且是它們的基接口換句話說基接口的集合完全由顯式基接口和它們的顯式基接口等等組成在下面的例子中
interface IControl
{
void Paint( ) ;
}
interface ITextBox: IControl
{
void SetText(string text) ;
}
interface IListBox: IControl
{
void SetItems(string[] items) ;
}
interface IComboBox: ITextBox IListBox { }
IComboBox 的基接口是IControl ITextBox 和 IlistBox
一個接口繼承它的基接口的所有成員換句話說上面的接口 IComboBox 就像Paint一樣繼承成員SetText 和 SetItems
一個實現了接口的類或結構也隱含地實現了所有接口的基接口
接口主體
一個接口的接口主體定義接口的成員
interfacebody:
{ interfacememberdeclarationsopt }
定義接口主要是定義接口成員請看下一節定義接口成員
From:http://tw.wingwit.com/Article/program/net/201311/15742.html