C#泛型支持簡單描述
C#語言有很多值得學習的地方,這里我們主要介紹C#泛型支持,包括介紹C#泛型通過算法和數據結構支持獨立編碼等方面。
"一次編碼,多次使用",這就是引入泛型的根源。在以前的C++中稱為模板,C#泛型通過算法和數據結構支持獨立編碼。例如,泛型列表意味著,你不必再重寫一個強類型集合。在本文中,作者將向你展示定義和使用泛型是多么容易的事情-請注意,長期以來泛型一直被認為是***級和最困難的術語。
泛型現在在任何一種語言中都被認為是一個高級的強有力的術語。當我在C++中***次接觸模板時,我對之有些疑惑。之后,我讀了Bjarne Stroustrop的《The Design and Evolution of C++》,才發現模板的使用就象C中的宏和用之來取代的簡單串替換模板一樣容易。其實,模板和泛型是相同的東西-盡管它們的實現稍微不同。
C#泛型支持在使用點處才定義算法及其數據類型。在C#的一些早期版本中,我們可以證明沒有泛型也可以工作,因為每種類型都是派生于一個公共基類型-object。這意味著程序員可以基于object類型定義一個棧類并且把一切東西放到該棧上(因為一切都派生于object)。然而,一個object棧意味著,Customer對象,Integer對象以及假想的對象都能被放置到同一個棧的實例上。結果是,開發者要子類化數據類型來把數據類型綁定到他們要與之交互的東西上去。例如,在編寫定制的商業對象時,我們就建議定義派生于 System.Collections.CollectionBase的強類型集合。原因很簡單:基于object定義一切被認為是弱類型定義。
業界的高手們在數十年前就確信強類型優于弱類型,所以.NET最終支持強類型,這看上去是很自然的事情。強類型算法當然建議類型化參數-這正是我們在泛型中所用的東西。
十幾年來,我們一直在使用字母T作為類型化參數的名字。這樣,在任何泛型類使用者所提供的數據類型的地方,你都能夠找到T。使用泛型的關鍵僅僅是提供這個T。定義泛型的關鍵在于實現一個方法或類,并且用特定數據類型來替換掉T。
C#泛型支持另外一些提煉。例如,一個方法或類可以有多個參數化的類型并且C#泛型支持WHERE約束-它用來具體要求類型化參數的類型。例如,如果一個泛型類型必須實現接口IDisposable,那么C#泛型支持實現這一限制的。
【編輯推薦】