泛型是公共語言運作時和程式設計語言提供的一種機制,它支援另外1種形式的代碼重用,也就是算法重用.
泛型包含泛型類,泛型接口,泛型委托,泛型方法,并非隻包含簡單的泛型類.在C#中,其他例如,屬性,索引器,事件,操作符方法,構造器本身不能有類型參數T.
T(類型參數),它的目的在于指明它操作的是一個未指定的資料類型,在源代碼中能夠使用資料類型的地方都可以使用它.
通過使用泛型,可以極大地提高代碼的重用度,同時還可以獲得強類型的支援,提升了應用程式的性能,避免了隐式的裝箱、拆箱,以及運作時的類型轉換錯誤。
冒泡算法
不用泛型的情況下,如果是整數類型排序,下面代碼中“?“就應為int類型,但如果這時候我們有需要給byte類型排序,就要複制一遍代碼,然後把int改為byte。這顯然不能展現代碼的複用。
做網站為了提高代碼複用,我們通常使用模闆它的具體做法是:每次生成靜态頁面時,先加載模闆,模闆中含有一些用特殊字元标記的占位符,然後從資料庫讀取資料,使用讀出的資料将模闆中的占位符替換掉。
将上面的方法視為一個模闆,将方法所操作的類型視為一個占位符,由于是一個占位符,是以可以代表任何的類型,這和靜态頁面生成時模闆的占位符可以用來代表來自資料庫中的任何資料道理是一樣的。
在類型名稱的後面加了一個尖括号,使用這個尖括号來傳遞占位符,也就是類型參數。
接下來,看一下如何使用泛型。
當需要為一個int類型的數組排序時:
當需要為一個byte類型的數組排序時:
拆裝箱
1. 裝箱在值類型向引用類型轉換時發生
2. 拆箱在引用類型向值類型轉換時發生
代碼示範
運作效果

有些經驗的同學就可以看出這段代碼有問題,因為類型不比對,添加到ArrayList中的是一
個int類型,而擷取時卻想将它轉換為string類。但是編譯器不能識别,不管是int也好,string也好,它們都是Object類型。在編寫代碼時,編譯器提供給開發者的最大幫助之一就是可以檢查出錯誤,也就是常稱的編譯時錯誤(Compile time error)。當使用ArrayList時,對于上面的問題,編譯器無能為力,因為它認為其是合法的,編譯可以順利通過。這種錯誤有時候隐藏在程式中很難發現,最糟糕的情況是産品已經傳遞使用者,而當使用者在使用時不巧執行到這段代碼,便會抛出一個異常,這時的錯誤,稱為運作時錯誤(Runtime
error)。
通過使用泛型集合,這種情況将不複存在,當試圖進行類似上面的轉換時,根本無法通
過編譯,這樣有助于盡早發現問題:
通過以上這些對比,可以看出泛型給我們程式設計提供了很大的友善,當然這些隻是我查到的一些資料加上自己的整理和實踐,如有不足之處請大家批評指正。