利用接口實現類的概括性
MSDN中關於接口的定義如下:
接口描述的是可屬於任何類或結構的一組相關功能。接口可由方法、屬性、事件、索引器或這四種成員類型的任意組合構成。接口不能包含字段。接口成員一定是公共的。
類和結構可以按照類繼承基類或結構的類似方式繼承接口,但有兩個例外:
· 類或結構可繼承多個接口。
· 類或結構繼承接口時,僅繼承方法名稱和簽名,因爲接口本身 不包含實現。
接口具有下列屬性:
- 接口類似於抽象基類:繼承接口的任何非抽象類型都必須實現接口的所有成員。
- 不能直接實例化接口。
- 接口可以包含事件、索引器、方法和屬性。
- 接口不包含方法的實現。
- 類和結構可從多個接口繼承。
- 接口自身可從多個接口繼承。
在實際使用中,接口的用法很廣泛,在這裏就簡單的介紹一種利用接口實現類概括性的例子。
示例項目是要求用控制檯實現名片的增刪改查。例子很簡單,但是在定義名片類的時候。對實際名片分析發現姓名職位之類具有標識性的字段一般不用怎麼麻煩,但是有時候有的名片具有不同的聯繫方式。比如有的填寫的座機號碼,有的填寫的手機號碼,甚至小靈通號碼等。或者同時擁有多種聯繫方式。這在信息錄入的過程中都要考慮到。因爲之前在定義名片管理這塊的時候,定義了類似名片盒之類的容器,然後就是名片信息的字段。這樣方便檢索。在聯繫方式上,決定使用接口實現泛型集合概括定義了聯繫方式這個字段。
下面用一個簡單的例子演示Iphone接口如何將手機、小靈通、座機等類實現概括的:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
class Class2
{
static void Main ()
{
List<IPhone> list = new List<IPhone>();//定義接口IPhone類型的集合操作IPhone對象
do
{
Console.WriteLine("1、手機錄入 2、坐機錄入 3、小靈通錄入");
IPhone phone = null;
switch (Console.ReadLine())
{
case "1":
phone = new Mobile();//子類(手機)實例化phone
WritePhone(phone);
break;
case "2":
phone = new Tel();//子類(座機)實例化phone
WritePhone(phone);
break;
case "3":
phone = new LittleSmart();//子類(小靈通)實例化phone
WritePhone(phone);
break;
}
if (phone != null)
{
list.Add(phone);
}
Console.WriteLine("退出請按E,繼續請按任意鍵!");
} while (Console.ReadLine().ToUpper() != "E");
foreach (IPhone iphone in list)//遍歷phone顯示list中內容
{
Console.WriteLine("名稱:{0},號碼:{1}", iphone.Name, iphone.Number);
}
}
static void WritePhone(IPhone phone)//獲取號碼
{
Console.WriteLine("請輸入{0}號碼:", phone.Name);
phone.Number = Console.ReadLine();
}
}
interface IPhone//定義接口
{
string Name//聯繫方式爲只讀
{
get;
}
string Number//號碼可以查看修改
{
get;
set;
}
}
class Mobile : IPhone//定義手機實例化類,繼承接口
{
string name = "手機";
public string Name
{
get
{
return name;
}
}
public string Number
{
get;
set;
}
}
class Tel : IPhone//定義座機實例化類,繼承接口
{
string name = "坐機";
public string Name
{
get
{
return name;
}
}
public string Number
{
get;
set;
}
}
class LittleSmart : IPhone//定義小靈通實例化類,繼承接口
{
string name = "小靈通";
public string Name
{
get
{
return name;
}
}
public string Number
{
get;
set;
}
}
}
由此可以看出,接口能很好的將具有相似屬性的一組對象總結概括起來,例如對於自行車個類,有山地車,摺疊車,兒童車等不同分類。在這就可以定義一個自行車類的接口,不管什麼類型的車都有自行車所具有的所有屬性。個體差異在繼承的過程中實現各異化。這樣就能很方便的管理那些不明確的類型。通過抽象概括在實際實例化的過程中在賦予各異化的差異。