泛型如何实现结构?

6 .net c# generics cil

我在想这个.类显然是由ptr传递的.我怀疑结构是通过复制传递但我不确定.(对于一个int数组而言,将每个元素都设置为ptr并将ptrs传递给ints似乎是浪费)

但考虑一下,List<MyStruct>无法知道我的结构的大小.我这样做会发生什么?是否有"List`1"的多个副本,每次我使用它与存储大小,它没有它创建一个新的实现?(调整T等的新偏移量).

这可能有意义,因为源将在DLL内部的CIL中.但我完全猜测,它是如何完成的?也许是ECMA标准的参考或页面#?

Bro*_*ass 9

泛型使用开放和封闭泛型类型的概念:参数化泛型类定义(即List<T>)是一种开放泛型类型,运行时为代码中的每个不同用途生成一个封闭的泛型类型,即为其创建不同的类型List<int>对于List<MyStruct>- 对于每个封闭的泛型类型,T在运行时已知大小和类型.

来自MSDN的澄清:

将泛型类型或方法编译为Microsoft中间语言(MSIL)时,它包含将其标识为具有类型参数的元数据.如何使用泛型类型的MSIL根据提供的类型参数是值类型还是引用类型而不同.

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

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