0

我的问题与泛型(在 C# 中)的编译方式有关。

代码示例

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

    }
}

问题

  1. 中的Foo类型MyMethod会被编译为具体类型吗?我想不会,因为这需要创建同一个类的多个版本(是否应该用不同的类型实例化),所以我想一个泛型类型得到了适当的支持,而不仅仅是语法糖?
  2. 在低层次上,泛型是如何实现的?针对类/方法的通用值是否存储为特殊隐藏字段?

我认为我的假设是不正确的,但我试图了解幕后的内部运作。

更新

如果我正确理解这篇文章,IL 中的一个新类是在运行时使用具体类型创建的。

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

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

4

0 回答 0