上學的時候,學校的老師,總會用一些簡單的例子來解釋什么是接口(interface)
這些例子可能像是這樣
/// <summary>/// 一個表示動物的接口/// </summary>public interface IAnimal{ /// <summary> /// 所有的動物都要吃東西 /// </summary> void Eat();}
然后再隨便上一個小動物,比如像這樣的
public class Cat : IAnimal{ public void Eat() { Console.WriteLine("我是小貓,我要吃魚") }}
然后對接口的解釋也基本上就結束了,隨著一些作業和考試,我們只知道,接口是這么一個沒有實現任何方法,只定義了方法內容的東西。
具體有什么用呢?也許只是覺得當有一些對象能夠形成像動物這樣的樹形圖的時候,我們才會在樹根的位置放置一個接口。
然后
接口的作用并不體顯在什么小動物、載具、或是人這種對象樹上
先說一種最簡單的接口設計情形:功能向接口
我們的程序里涉及到很多對象,但這些對象都有一個共同的功能——銷售,擁有一個價格,是否參加折扣活動,以及折后價格
那么,我們可以針對這項“功能”設計一個接口
/// <summary>/// 表示一個可以用于銷售的功能接口/// </summary>public interface ISaleable{ /// <summary> /// 價格 /// </summary> int PRice { get; } /// <summary> /// 是否可以參加折扣 /// </summary> bool CanDiscount { get; } /// <summary> /// 折后價格 /// </summary> int DiscountedPrice {get;}}
有了這么一個接口以后,我們就可以做使用這個“接口”的方法了
比如我們做一個銷售員的對象,除去那些姓名、員工號一類的屬性不談,至少它應當擁有一個方法,叫Sell,我們來看代碼
public class Seller{ void Sell(ISaleable good) { if (good.CanDiscount) { Console.Write("您好,你所購買的產品可以參加折扣。折扣的價格是{0}", good.DiscountedPrice); } else { Console.WriteLine("您好,你所購買的產品沒有參加任何折扣,只能按照原價{0}進行購買",good.Price) } }}
于是,我們有了一個功能接口,可以使用了該功能的類型,那么,現在讓我們像上大學那樣,隨便建幾個類型吧
public class Car : ISaleable{ public int Price { get { return 100000; } } public bool CanDiscount { get { return false; } } /// <summary> /// 由于該類型不可以有折扣,所以折后價格是可以不實現的 /// </summary> public int DiscountedPrice { get { throw new NotImplementedException(); } }}public class Compute : ISaleable{ public int Price { get { return 5000; } } public bool CanDiscount { get { return true; } } public int DiscountedPrice { get { return 5000 * 0.8; } }}
這樣,銷售員就可以賣這兩樣商品了
在下一篇 《什么是接口(入門篇)——使你的程序功能豐富》 您還可以學習到接口更多的用法
新聞熱點
疑難解答