我从运行时的MSDN泛型文档中注意到:
当首次使用值类型作为参数构造泛型类型时,运行库将创建一个特殊的泛型类型,所提供的参数或参数将被替换到MSIL中的适当位置。为用作参数的每个唯一值类型创建一次专用泛型类型。
和
泛型对于引用类型的工作方式有些不同。当第一次使用任何引用类型构造泛型类型时,运行库将创建一个特殊的泛型类型,其中对象引用将替代后者中的参数。然后,每次使用引用类型作为参数实例化构造的类型时,无论它是什么类型,运行库都重用以前创建的泛型类型的专门版本。这是可能的,因为所有引用都是相同大小的。
由此推断,虽然字符串数据类型在C#和CLR中都具有值类型语义,但是使用字符串类型参数实例化的泛型类型将使用与其他引用类型相同的特殊泛型类型,而不是像其他值类型那样使用自己的泛型类型,对吗?在引入泛型时,自V2以来,这种行为是否都是相同的?
发布于 2016-02-09 14:14:34
string在各个方面都是引用类型。它有维基百科意义上的“值类型语义”,但这并不意味着它在MSDN中的术语中是一个值类型。在将所有非指针类型划分为“引用类型”或“值类型”的常用CLR和C#术语中,字符串肯定是引用类型。请注意,您也可以轻松地使用值语义构建自己的引用类型--但在规范所关心的所有方面,它仍然是一个引用类型。
https://stackoverflow.com/questions/35294236
复制相似问题