我的问题与泛型(在 C# 中)的编译方式有关。
代码示例
public class MyClass<Foo>
{
public void MyMethod(Foo test)
{
}
}
问题
- 中的
Foo
类型MyMethod
会被编译为具体类型吗?我想不会,因为这需要创建同一个类的多个版本(是否应该用不同的类型实例化),所以我想一个泛型类型得到了适当的支持,而不仅仅是语法糖? - 在低层次上,泛型是如何实现的?针对类/方法的通用值是否存储为特殊隐藏字段?
我认为我的假设是不正确的,但我试图了解幕后的内部运作。
更新
如果我正确理解这篇文章,IL 中的一个新类是在运行时使用具体类型创建的。
因此,运行时会生成另一个版本的泛型类型,并在 MSIL 中的适当位置替换 long。不再需要转换,因为每个专门的泛型类本身都包含值类型。