標籤:16px 冒號 ber htm parent toolbar 是什麼 引用 存取權限
轉載:http://www.cnblogs.com/jara/p/3450493.html淺析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、介面可以定義方法、屬性和索引。所以,對比一個類,介面的特殊性是:當定義一個類時,可以派生自多重介面,而你只能可以從僅有的一個類派生。
C#介面簡單介紹