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}