C#接口是一個讓很多初學者容易迷糊的東西,用起來好象很簡單,定義接口,然後在裡面定義方法, 通過繼承與他的子類來完成具體的實現。但沒有真正認識接口的作用的時候就覺得用接口是多此一舉,當 然你這樣想是絕對錯誤的。在軟件設計中有一個非常重要的原則就是:面向接口編程,依賴與接口或抽象 層。可見接口在真正的開發中是多麼的重要。
在之前C#編程利器之一:類(Class)一文裡介紹了類的相關知識,本文主要介紹OO編程中的另一個重要 知識點--接口。在某種程度上說,接口也是類,一種特殊的類或抽象類。 更准確說接口只包含方法、委 托或事件的簽名。方法的實現是在實現接口的類中完成的[MSDN]。
一、接口的定義
如上MSDN上對接口的定義,接口只包含方法、委托或事件的簽名。這句話用更通俗點的解釋便是,接 口只是負責完成定義的操作,而不去實現具體的細節。如下面的IPlayer接口,它是一個玩游戲的接口, 裡面只是定義了相應的方法,而不帶方法的具體實現,代碼如下:
1/**//// <summary>
2/// 玩游戲接口
3/// </summary>
4public interface IPlayer
5{
6 /**//// <summary>
7 /// 獲取玩家的名字
8 /// </summary>
9 /// <returns>玩家的名字</returns>
10 string GetName();
11
12 /**//// <summary>
13 /// 由Player決定出什麼手勢
14 /// </summary>
15 /// <returns>本接口定義的三個常量之一</returns>
16 string Show();
17}
以上就是一個典型的接口的定義。定義了一個名為IPlayer的接口,內部定義了兩個方法GetName和 Show。除了在接口裡定義方法以外,我們還可以定義屬性、索引及事件等,詳細請查看MSDN上的定義或是 相關書籍,這裡以屬性為例簡單介紹下,在接口裡只能定義不實現,具體的實現是交給其子類去完成的, 那麼屬性應該怎麼定義呢?
通常我們定義屬性如下:
1/**//// <summary>
2/// 定義_Name屬性,並提供get;set屬性訪問器
3/// </summary>
4private string _Name;
5public string Name
6{
7 get { return _Name; }
8 set { _Name = value; }
9}