泛型的占位符是否编译为实际数据类型?

时间:2017-01-06 16:39:45

标签: c# generics cil compiled intermediate-language

我的问题涉及到如何编译Generics(在C#中)。

代码示例

public class MyClass<Foo>
{
    public void MyMethod(Foo test)
    {

    }
}

问题

  1. Foo中的MyMethod类型是否会被编译为具体类型?我想象不会因为这需要创建同一个类的多个版本(应该用不同的类型实例化),所以我想一个泛型类型是否得到了适当的支持而不仅仅是语法糖?
  2. 在较低的层面上,仿制药是如何实施的?针对类/方法的通用值是否存储为特殊隐藏字段?
  3. 我认为我的假设不正确,但我试图了解幕后的内部运作。

    更新

    如果我正确理解了这篇文章,那么在运行时期间会使用具体类型创建IL中的新类。

      

    因此,运行时生成泛型类型的另一个版本,并在MSIL中的适当位置替换long。转换不再是必需的,因为每个专用泛型类本身都包含值类型。

    https://msdn.microsoft.com/en-us/library/f4a6ta2h.aspx

0 个答案:

没有答案