从运行时文档中的MSDN Generics我注意到:
当首次使用值类型作为参数构造泛型类型时,运行时会创建一个专用泛型类型,其中提供的参数或参数将替换为MSIL中的相应位置.为每个用作参数的唯一值类型创建一次专用泛型类型.
和
泛型对参考类型的工作方式有所不同.第一次使用任何引用类型构造泛型类型时,运行时会创建一个专用泛型类型,其中对象引用将替换MSIL中的参数.然后,每次构造类型以引用类型作为其参数进行实例化时,无论它是什么类型,运行时都会重用先前创建的泛型类型的专用版本.这是可能的,因为所有引用都是相同的大小.
我是否正确地推断,尽管字符串数据类型在C#和CLR中都具有值类型语义,但使用字符串类型参数实例化的泛型类型将使用与其他引用类型相同的专用泛型类型,而不是比拥有自己的其他价值类型呢?无论哪种方式,这种行为都是相同的,因为V2引入了泛型?
Jon*_*eet 11
string在各方面都是一种参考类型.它具有维基百科意义上的"值类型语义",但这并不使它成为MSDN中使用的术语中的值类型.在将所有非指针类型划分为"引用类型"或"值类型"的公共CLR和C#术语中,字符串绝对是引用类型.请注意,您也可以使用值语义轻松构建自己的引用类型 - 但它仍然是规范所关注的每种方式的引用类型.