是被视为值类型或引用类型的字符串泛型参数

本文关键字:引用类型 字符串 泛型 参数 类型 | 更新日期: 2023-09-27 18:34:02

从运行时文档中的 MSDN 泛型中,我注意到:

首次使用值类型作为参数构造泛型类型时,运行时会创建一个专用泛型类型,其中提供的一个或多个参数替换在 MSIL 中的相应位置。为用作参数的每个唯一值类型创建一次专用泛型类型。

泛型对于引用类型的工作方式略有不同。首次使用任何引用类型构造泛型类型时,运行时会创建一个专用泛型类型,其中的对象引用将替换为 MSIL 中的参数。然后,每次使用引用类型作为其参数实例化构造类型时,无论它是什么类型,运行时都会重用以前创建的泛型类型的专用版本。这是可能的,因为所有引用的大小都相同。

我是否可以从中推断出,尽管字符串数据类型在 C# 和 CLR 中都具有值类型语义,但使用字符串类型参数实例化的泛型类型将使用与其他引用类型相同的专用泛型类型,而不是像其他值类型那样具有自己的泛型类型?无论哪种方式,自引入泛型的 V2 以来,这种行为是否相同?

是被视为值类型或引用类型的字符串泛型参数

string

各个方面都是引用类型。它具有维基百科意义上的"值类型语义",但这并不能使其成为 MSDN 中使用的术语中的值类型。在将所有非指针类型划分为"引用类型"或"值类型"的常见 CLR 和 C# 术语中,字符串绝对是引用类型。请注意,您也可以使用值语义轻松构建自己的引用类型 - 但它仍然是规范所关心的各种引用类型。