1 回答

TA貢獻1847條經驗 獲得超7個贊
如果在運算過程中使用<>,表示是不等于。
在<>之間加入類型參數,如<int>,這是有關泛型方面的知識。
1.概述
型并不是一個全新的結構,其他語言中有類似的概念
如:C++模板就與泛型相當
泛型不僅是C#語言的一種結構,而且是CLR定義的
所以,即使泛型類是在C#中定義的,也可以在Visual Basic中用一個特定的類型實例化該泛型
2.泛型的優點
(1)性能
System.Collections —— 非泛型集合類
System.Collections. Generic —— 泛型集合類
對值類型使用非泛型集合類,在把值類型轉換為引用類型,和把引用類型轉換為值類型時,需要進行裝箱和拆箱操作
[知識點]裝箱和拆箱
.NET很容易把值類型轉換為引用類型,所以可以在需要對象(對象是引用類型)的任意地方使用值類型
例如,int可以賦予一個對象
從值類型轉換為引用類型稱為裝箱。如果方法需要把一個對象作為參數,而且傳送了一個值類型,裝箱操作就會自動進行
另一方面,裝箱的值類型可以使用拆箱操作轉換為值類型。在拆箱時,需要使用類型轉換運算符
裝箱和拆箱操作很容易使用,但性能損失比較大,迭代許多項時尤其如此
而通過使用泛型,如:
System.Collections.Generic命名空間中的List<T>類不使用對象,而是在使用時定義類型
List<int> list = new List<int>();
List<T>類的泛型類型定義為int,所以int類型在JIT編譯器動態生成的類中使用,不再進行裝箱和拆箱操作
(2)類型安全
(3)二進制代碼的重用
更好地重用二進制代碼。泛型類可以定義一次,用許多不同的類型實例化。而不需要像C++模板那樣訪問源代碼
泛型類型可以在一種語言中定義,在另一種.NET語言中使用
(4)泛型類的定義會放在程序集中,所以用某個類型實例化泛型類不會在IL代碼中復制這些類
但在JIT編譯器把泛型類編譯為內部碼時,會給每個值類型創建一個新類;引用類型共享同一個內部類的所有實現代碼
(5)命名約定
泛型類型的名稱用字母T作為前綴
如沒有特殊的要求,泛型類型允許用任意類替代,且只使用了一個泛型類型,就可以用字符T作為泛型類型的名稱
如泛型類型有特定的要求(比如:必須實現一個接口或派生于基類),或者使用了兩個或多個泛型類型,那么就應給泛型類型使用描述性的名稱
- 1 回答
- 0 關注
- 3727 瀏覽
添加回答
舉報