這章的書寫感覺很普通,是些基礎的認知知識。
其中一點的重要認知,泛型介面的好處(其實也是使用泛型的好處之一):編譯時型別安全&處理值型別時減少裝箱。
再說點書上沒有的。本來這些知識我打算另外分類在C#基礎裡講的,這裡先單獨表述下。
介面回撥
其實我想不通為什麼這本書不講一下介面回撥這個概念,我可不會相信介面回撥只在java中用到。
到現在為止,我突然發現,很多程式設計的基礎概念,於物件導向程式設計的語言來說,都是通用的,但是抱歉,在C#裡(相關書籍)居然沒有!但我相信你翻閱Java書籍就有很大機率看到這些概念的詳盡解釋。
還好我也學過Java。
直到現在,我鮮少在C#書籍中看到"介面回撥"這一概念。這對於一開始就接觸C#的初學者來說,如果很多程式設計基礎概念不講,真的很難理解一些物件的行為。
我開始懷疑C#書籍的編寫者都是站在怎樣的高度。
介面回撥也是多型的體現。
首先用一段程式碼來示例介面回撥:
介面IMyInterface1的程式碼如下:
namespace CATest101 { interface IMyInterface1 { void Method1(); } }
類MyClass1,實現介面IMyInterface1,程式碼(省略名稱空間)如下:
public class MyClass1:IMyInterface1 { public void Method1() { Console.WriteLine("MyClass1中的方法:Method1()"); } }
Main方法中的程式碼(介面回撥):
static void Main(string[] args) { MyClass1 my = new MyClass1(); IMyInterface1 i = my;//宣告介面型別指標指向MyClass1的例項物件 i.Method1(); Console.ReadLine(); }
輸出:
如上圖所示,介面變數i呼叫Method1方法,實際呼叫的是子類MyClass1中的Method1方法。
這就是介面回撥。由介面回撥會引出另一個類似概念:
向上轉型
向上轉型即是:父類引用指向子類物件,即類似Father f = new Child();的程式碼表述形式。
現假定父類子類都有自己的myMethod方法,
呼叫f.myMethod();如果父類中myMethod是虛方法,那麼呼叫的是子類的myMethod(子類必須使用override重寫的情況),如果父類的myMethod非虛方法,則f.myMethod將呼叫自己內部的myMethod方法。
設計模式中“簡單工廠模式”就是利用的向上轉型這個原理。
最後套用一句百科知識:
介面回撥和向上轉型是設計模式的解耦核心,可以說幾乎所有的模式都是建立在這兩者的應用之上的。