標籤:blog 使用 cti io line div
C#介面(interface)執行個體子(簡單而經典)2008/12/04 10:04using System;using System.Collections.Generic;using System.Text;using System.Threading;namespace AppTest{ class Demo_interface { static void Main(string[] args) { //使用(注意,這裡是使用介面 IPrint,下面是不同的執行個體,獲得不同功能) IPrint I; I = new A(); //執行個體化 A,將列印出 A I.Print(); I = new B(); //執行個體化 B,將列印出 B I.Print(); Thread.Sleep(3 * 1000); //暫停3秒,看列印結果 } } //定義介面,定義後不需要改變,需要不同功能,繼承時擴充即可 interface IPrint { //介面只包含方法、屬性、索引器、事件的簽名,但不能定義欄位和包含實現的方法; //支援多繼承;可以用於支援回調;可以作用於實值型別和參考型別;C#中不能包含任何靜態成員 //不能被直接執行個體化,可以通過繼承實現其抽象方法。 void Print();//只定義,不實現 //IPerson(); //錯誤 //string name; //錯誤 //public void GetIDcard(); //錯誤 //void GetName(); //正確 //void GetAge(string s); //正確 //int GetHeight(); //正確 } //A 繼承介面 class A : IPrint { //實現介面方法,必須有, //當然還可以再添加其它的欄位、屬性、方法 public void Print() { System.Console.WriteLine("A"); } } //B 繼承介面 class B : IPrint { public void Print() { System.Console.WriteLine("B"); } }}//在這個例子中,IPrint 介面中定義了Print方法,但沒有實現方法體. //類A和類B都繼承了IPrint介面,並且實現了不同的Print方法. //在Main 中調用A\B,獲得不同的列印結果=====================================寫的不錯,不過這個例子還缺少一部分,人家可以說我可以在基類上定義Print(),PrintPreview() 2個虛函數,讓後續不同印表機的類繼承這個基類,override 虛函數,然後通過基類指標一樣可以實現這個功能。 如果你這麼說,如果要給HP印表機和IBM印表機增加一個新功能如Scan(),如果用基類虛函數就得重新修改基類,基類修改會影響到所有繼承他的類,系統成型後修改基類是非常危險的,而用介面只需讓HP的,IBM的列印類再繼承一個IScan介面就行了,不會影響到其他類,這就是介面優越於虛函數的地方。五大物件導向設計原則單一職責原則2. 開放封閉原則3. 裡氏替換原則 定義:如果對於類型S的每一個對象o1,都有一個類型T的對象o2,使對於任意用類型T定義的程式P, 將o2替換為o1,P的行為保持不變,則稱S為T的一個子類型。4. 依賴倒置原則5. 介面隔離原則