第一節 接口慨述
接口(interface)用來定義一種程序的協定實現接口的類或者結構要與接口的定義嚴格一致有了這個協定就可以拋開編程語言的限制(理論上)接口可以從多個基接口繼承而類或結構可以實現多個接口接口可以包含方法屬性事件和索引器接口本身不提供它所定義的成員的實現接口只指定實現該接口的類或接口必須提供的成員
接口好比一種模版這種模版定義了對象必須實現的方法其目的就是讓這些方法可以作為接口實例被引用接口不能被實例化類可以實現多個接口並且通過這些實現的接口被索引接口變量只能索引實現該接口的類的實例例子
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) ;
上面例子中的接口包含一個索引this一個事件Even一個方法Find和一個屬性Point
接口可以支持多重繼承就像在下例中接口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 { }
類和結構可以多重實例化接口就像在下例中類EditBox繼承了類Control同時從IDataBound和IControl繼承
interface IDataBound
{
void Bind(Binder b) ;
}
public class EditBox: Control IControl IDataBound
{
public void Paint( ) ;
public void Bind(Binder b) {}
}
在上面的代碼中Paint方法從IControl接口而來Bind方法從IDataBound接口而來都以public的身份在EditBox類中實現
說明
C#中的接口是獨立於類來定義的這與 C++模型是對立的在 C++中接口實際上就是抽象基類
接口和類都可以繼承多個接口
而類可以繼承一個基類接口根本不能繼承類這種模型避免了 C++的多繼承問題C++中不同基類中的實現可能出現沖突因此也不再需要諸如虛擬繼承和顯式作用域這類復雜機制C#的簡化接口模型有助於加快應用程序的開發
一個接口定義一個只有抽象成員的引用類型C#中一個接口實際所做的僅僅只存在著方法標志但根本就沒有執行代碼這就暗示了不能實例化一個接口只能實例化一個派生自該接口的對象
接口可以定義方法屬性和索引所以對比一個類接口的特殊性是當定義一個類時可以派生自多重接口而你只能可以從僅有的一個類派生
接口與組件
接口描述了組件對外提供的服務在組件和組件之間組件和客戶之間都通過接口進行交互因此組件一旦發布它只能通過預先定義的接口來提供合理的一致的服務這種接口定義之間的穩定性使客戶應用開發者能夠構造出堅固的應用一個組件可以實現多個組件接口而一個特定的組件接口也可以被多個組件來實現
組件接口必須是能夠自我描述的這意味著組件接口應該不依賴於具體的實現將實現和接口分離徹底消除了接口的使用者和接口的實現者之間的耦合關系增強了信息的封裝程度同時這也要求組件接口必須使用一種與組件實現無關的語言目前組件接口的描述標准是IDL語言
由於接口是組件之間的協議因此組件的接口一旦被發布組件生產者就應該盡可能地保持接口不變任何對接口語法或語義上的改變都有可能造成現有組件與客戶之間的聯系遭到破壞
每個組件都是自主的有其獨特的功能只能通過接口與外界通信當一個組件需要提供新的服務時可以通過增加新的接口來實現不會影響原接口已存在的客戶而新的客戶可以重新選擇新的接口來獲得服務
組件化程序設計
組件化程序設計方法繼承並發展了面向對象的程序設計方法它把對象技術應用於系統設計對面向對象的程序設計的實現過程作了進一步的抽象我們可以把組件化程序設計方法用作構造系統的體系結構層次的方法並且可以使用面向對象的方法很方便地實現組件
組件化程序設計強調真正的軟件可重用性和高度的互操作性它側重於組件的產生和裝配這兩方面一起構成了組件化程序設計的核心組件的產生過程不僅僅是應用系統的需求組件市場本身也推動了組件的發展促進了軟件廠商的交流與合作組件的裝配使得軟件產品可以采用類似於搭積木的方法快速地建立起來不僅可以縮短軟件產品的開發周期同時也提高了系統的穩定性和可靠性
組件程序設計的方法有以下幾個方面的特點
編程語言和開發環境的獨立性
組件位置的透明性
組件的進程透明性
可擴充性
可重用性
具有強有力的基礎設施
系統一級的公共服務
C#語言由於其許多優點十分適用於組件編程但這並不是說C#是一門組件編程語言也不是說C#提供了組件編程的工具我們已經多次指出組件應該具有與編程語言無關的特性請讀者記住這一點組件模型是一種規范不管采用何種程序語言設計組件都必須遵守這一規范比如組裝計算機的例子只要各個廠商為我們提供的配件規格接口符合統一的標准這些配件組合起來就能協同工作組件編程也是一樣我們只是說利用C#語言進行組件編程將會給我們帶來更大的方便
知道了什麼是接口接下來就是怎樣定義接口請看下一節定義接口
基於C#的接口基礎教程之二
基於C#的接口基礎教程之三
基於C#的接口基礎教程之四
基於C#的接口基礎教程之五
基於C#的接口基礎教程之六
From:http://tw.wingwit.com/Article/program/net/201311/15744.html