我知道泛型用于实现类型安全,我经常读到它们主要用于自定义集合.但为什么我们需要让它们通用?
例如,
为什么我不能用string[]而不是List<string>?
让我们考虑我声明一个泛型类,它有一个泛型类型参数X.
T x;
如果我提供了一个类的方法
x = x + 1;
实际上是什么意思?我不知道T实际会发生什么,我不知道实际上会发生什么x = x + 1.
如果我无法在我的方法中进行自己的操作,那么泛型如何帮助我呢?
我已经学过很多书卷答案了.如果任何人能够在此提供一些明确的见解,将不胜感激.
此致,NLV
Eri*_*ert 17
你的问题回答了自己.数组类型本身就是一种通用类型.如果我们把一个通用型系统CLR V1.0,我愿意打赌,不会有什么特殊的数组类型,就只是Array<T>一起List<T>等.由于CLR的第一个版本没有泛型类型,因此我们将最重要和最明显的泛型类型(数组类型)放入其中.因此,在那里只有一大堆专用代码来处理数组,这是v1.0中支持的CLR的一种通用类型.
由于数组本质上是泛型类型,因此您的问题会自行解决:泛型类型的原因通常与激发数组类型模式创建的原因相同.即:数组类型以特定方式放大其基础类型的能力.
int表示数字.int []表示数字的集合; 我们已经放大数的概念,以数字集合的概念.客户代表客户.Customer []代表了一组客户的概念.我们将客户的概念扩展到了客户收集的概念.从类型T到类型T []的映射表示将类型的实例一般放大到该类型的实例集合的抽象概念.
同样的理由激励所有通用类型.该Nullable<T>类型将类型放大为"此事可能是该类型的实例"的概念.该IComparable<T>类型将类型放大为"此类型的实例可以相对于另一个实例进行排序"的概念.等等.每个泛型类型就像数组模式一样:它表示将类型放大为新类型,为该类型提供新操作.
简而言之:通用类型系统的目的是使您能够发明自己的类型放大,并使用类型系统操纵这些放大.