C#接口總結


淺析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、接口可以定義方法、屬性和索引。所以,對比一個類,接口的特殊性是:當定義一個類時,可以派生自多重接口,而你只能可以從僅有的一個類派生。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM