泛型(C#2.0):
泛型是程式設計語言的一種特性。允許程式設計師在強型別程式設計語言中編寫程式碼時定義一些可變部分,那些部分在使用前必須作出指明。各種程式設計語言和其編譯器、執行環境對泛型的支援均不一樣。將型別引數化以達到程式碼複用提高軟體開發工作效率的一種資料型別。泛型類是參照型別,是堆物件,主要是引入了型別引數這個概念。
優點:
1.使用泛型類、方法,我們可以極大提高程式碼的重用性,不需要對型別不同程式碼相同(僅型別引數不同)的程式碼寫多次。
2.建立泛型類,可在編譯時建立型別安全的集合
3.避免裝箱和拆箱操作降低效能,在大型集合中裝箱和拆箱的影響非常大.
泛型約束:
where T: struct
型別引數必須是值型別。可以指定除 Nullable 以外的任何值型別。有關更多資訊,請參見使用可以為 null 的型別(C# 程式設計指南)。
where T : class
型別引數必須是參照型別;這一點也適用於任何類、介面、委託或陣列型別。
where T:new()
型別引數必須具有無引數的公共建構函式。當與其他約束一起使用時,new() 約束必須最後指定。
where T:<基礎類別名>
型別引數必須是指定的基礎類別或派生自指定的基礎類別。
where T:<介面名稱>
型別引數必須是指定的介面或實現指定的介面。可以指定多個介面約束。約束介面也可以是泛型的。
where T:U
為 T 提供的型別引數必須是為 U 提供的引數或派生自為 U 提供的引數。