什麼是泛型編程

泛型編程讓你編寫完全一般化並可重複使用的算法,其效率與針對某特定數據類型而設計的算法相同。泛型編程的代表作品STL是一種高效、泛型、可交互操作的 軟件組件。所謂泛型(Genericity),是指具有在多種數據類型上皆可操作的含意,與模板有些相似。STL巨大,而且可以擴充,它包含很多計算機基 本算法和數據結構,而且將算法與數據結構完全分離,其中算法是泛型的,不與任何特定數據結構或對象類型系在一起。STL以迭代器(Iterators)和 容器(Containers)爲基礎,是一種泛型算法(Generic Algorithms)庫,容器的存在使這些算法有東西可以操作。STL包含各種泛型算法(algorithms)、泛型指針(iterators)、泛 型容器(containers)以及函數對象(function objects)。STL並非只是一些有用組件的集合,它是描述軟件組件抽象需求條件的一個正規而有條理的架構。

什麼是範型?

u System.Collections.Generic命名空間包含了範型集合需要的類和接口;

u 我們在寫程序的時候, 經常需要這種東西: 可變長度的Array, 比如說一個string[]
而事實上定義了一個string[]並初始化後那麼它的長度就固定了, Array根本做不到. 如果非要實現這種功能, 那唯一合理的辦法只有定義一個ArrayList, 這個類似於vector類型的東西可以實現可變長度的Array, 但是帶來幾個問題:

l 1. ArrayList裏面操作的都是object類型, 這意味着如果我放一個string進去, 再當作int取出來, 這在編譯階段是不會出錯的, 而在運行時纔會提示轉換無效

l 2. 以object方式存儲時, 需要裝箱和拆箱操作, 這些步驟會帶來額外的性能消耗 - 而沒法做到普通Array那樣直接

l 3. 如果要避免前兩個問題, 那麼所有的需要強類型的集合類都需要分別定義, 比如XxxxCollection, 非常麻煩

u 解決辦法:

l Collection<string> strCollection = new Collection<string>();

strCollection.Add("a");strCollection.Add("b");.....

l 這樣strCollection就是我們需要的集合. 範型使Add/Remove等操作全部都是類型安全的, 以索引器訪問時也是類型安全的, 這在編譯階段(對於VS來說可以包括編寫代碼的階段)就可以反映出來.
而性能方面, 這裏根本就沒有裝箱/拆箱的操作, 所以比原有ArrayList方式性能更高. 也沒有像以前那樣聲明一個StringCollection之類的class, 代碼上也簡潔的多.

u 範型的特點

l 增加了編譯時的類型檢查;

l 減少了裝箱和拆箱操作;

l 減少了運行時的類型檢查;

l Cast;

;-)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章