淺析C#接口特點及實例應用
C#接口(interface)的掌握對我們開發有什么作用呢?C#接口的使用能夠使我們的程序有什么改進?那么我們首先我們來看看C#接口特點以及具體的實例使用分析:
- C#接口特點1:都是“虛的”不能被實例化,這也是接口中為什么不能包含字段--成員變量的原因
- C#接口特點2:正因為接口是虛的,所以接口內的索引,屬性,時間等只能有聲明,而不能在接口內實現,具體如何實現是派生接口或者派生類的事.
- C#接口特點3:都具有模板的性質,如果一個接口或者類從某一個接口繼承,它將自動具有被集成者的特征(包括索引,屬性,函數,實踐等).
- C#接口特點4:接口支持多重繼承,而C#中,類之支持單一繼承,接口實際表示的是一種承載能力。
下面是C#接口實例的一個簡單定義:
interface SampInterface1 { string this[ int index] { get; set } ; event EventHandler Event; void Find( int value ); //注意此處沒有 { } string Po int { get; set } ; }
上面的C#接口實例定義了一個索引 this,一個實踐Event,一個方法Find和一個屬性Point.
public interface SampIneterface:SampIneterface1{ pravite int a=1; void find (int value) { a+=value; } event EventHandler Event; protected void onEvent() { if(Event=null) {return Event(this.System.EventAgrs.Empty;)} } 1}
C#接口的定義詳解
C#接口的定義從技術上講,接口是一組包含了函數型方法的數據結構。通過這組數據結構,客戶代碼可以調用組件對象的功能。
C#接口的定義一般形式為:
[attributes] [modifiers] interface identifier [:base-list] {interface-body}[;]
C#接口的定義說明:
· attributes(可選):附加的定義性信息。
· modifiers(可選):允許使用的修飾符有new和四個訪問修飾符。分別是:new、public、protected、internal、private。在一個接口定義中同一修飾符不允許出現多次,new修飾符只能出現在嵌套接口中,表示覆蓋了繼承而來的同名成員。The public, protected, internal, and private修飾符定義了對接口的訪問權限。
· 指示器和事件。
· identifier:接口名稱。
· base-list(可選):包含一個或多個顯式基接口的列表,接口間由逗號分隔。
· interface-body:對接口成員的定義。
· 接口可以是命名空間或類的成員,並且可以包含下列成員的簽名: 方法、屬性、索引器 。
· 一個接口可從一個或多個基接口繼承。
接口這個概念在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 " ) ; } }
C#接口的定義之基接口
一個接口可以從零或多個接口繼承,那些被稱為這個接口的顯式基接口。當一個接口有比零多的顯式基接口時,那么在接口的定義中的形式為,接口標識符后面跟着由一個冒號":"和一個用逗號","分開的基接口標識符列表。
C#接口的定義之接口基:
接口類型列表說明:
- 一個接口的顯式基接口必須至少同接口本身一樣可訪問。例如,在一個公共接口的基接口中指定一個私有或內部的接口是錯誤的。
- 一個接口直接或間接地從它自己繼承是錯誤的。
- 接口的基接口都是顯式基接口,並且是它們的基接口。換句話說,基接口的集合完全由顯式基接口和它們的顯式基接口等等組成。在下面的例子中
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。
- 一個實現了接口的類或結構也隱含地實現了所有接口的基接口。
C#接口的定義之接口主體
一個接口的接口主體定義接口的成員。
interface-body: { interface-member-declarationsopt }
詳解C#接口以及實現
C#接口是什么呢?C#接口(interface)用來定義一種程序的協定。實現接口的類或者結構要與接口的定義嚴格一致。有了這個協定,就可以拋開編程語言的限制(理論上)。C#接口可以從多個基接口繼承,而類或結構可以實現多個接口。C#接口可以包含方法、屬性、事件和索引器。接口本身不提供它所定義的成員的實現。接口只指定實現該接口的類或接口必須提供的成員。
C#接口好比一種模版,這種模版定義了對象必須實現的方法,其目的就是讓這些方法可以作為接口實例被引用。接口不能被實例化。類可以實現多個接口並且通過這些實現的接口被索引。接口變量只能索引實現該接口的類的實例。例子:
interface IMyExample { string this[int index] { get ; set ; } event EventHandler Even ; void Find(int value) ; string Point { get ; set ; } } public delegate void EventHandler(object sender, Event e) ;
上面例子中的C#接口包含一個索引this、一個事件Even、一個方法Find和一個屬性Point。C#接口可以支持多重繼承。就像在下例中,接口"IComboBox"同時從"ITextBox"和"IListBox"繼承。
interface IControl { void Paint( ) ; } interface ITextBox: IControl { void SetText(string text) ; } interface IListBox: IControl { void SetItems(string[] items) ; } interface IComboBox: ITextBox, IListBox { }
類和結構可以多重實例化C#接口。就像在下例中,類"EditBox"繼承了類"Control",同時從"IDataBound"和"IControl"繼承。
interface IDataBound { void Bind(Binder b) ; } blic class EditBox: Control, IControl, IDataBound { public void Paint( ) ; public void Bind(Binder b) { } }
在上面的代碼中,"Paint"方法從"IControl"接口而來;"Bind"方法從"IDataBound"接口而來,都以"public"的身份在"EditBox"類中實現。
C#接口的總結說明:
1、C#中的接口是獨立於類來定義的。這與 C++模型是對立的,在 C++中接口實際上就是抽象基類。
2、接口和類都可以繼承多個接口。
3、而類可以繼承一個基類,接口根本不能繼承類。這種模型避免了 C++的多繼承問題,C++中不同基類中的實現可能出現沖突。因此也不再需要諸如虛擬繼承和顯式作用域這類復雜機制。C#的簡化接口模型有助於加快應用程序的開發。
4、一個接口定義一個只有抽象成員的引用類型。C#中一個接口實際所做的,僅僅只存在着方法標志,但根本就沒有執行代碼。這就暗示了不能實例化一個接口,只能實例化一個派生自該接口的對象。
5、接口可以定義方法、屬性和索引。所以,對比一個類,接口的特殊性是:當定義一個類時,可以派生自多重接口,而你只能可以從僅有的一個類派生。