在泛型类实例化上创建了多少个实例?

gre*_*man 1 c# java generics instantiation

考虑这样的课程:

class Foo<T>
{
   private T myField;
   public void Set(T x)
   {
      myField = x;
   }
}
Run Code Online (Sandbox Code Playgroud)

然后用T等于int,bool(值类型)和String,实例化它List.

如何创建实例化以及它们的外观?

我对Java和C#感兴趣.

从我读到的内容中,Java将创建一个基本类型的通用类,而在C#中将有两个类int,bool加上单个类String,List因为它们是引用值(这是真的吗?静态字段怎么样?).

Mar*_*ell 8

请注意,我假设是常规CLR - 没有AOT等.

在IL级别:有一个定义Foo<T>; 无论如何,IL都是相同的(共享的)T.

在JIT级别:对于所有(共享)引用类型参数,以及每个(单独)值类型参数,类型被jitted(每个通用参数)一次.所以对于JIT 和是共享的,并且对于每个单独JIT 和.Foo<string>Foo<List<...>>Foo<int>Foo<bool>

创建的对象/实例数与new Foo<...>(...)调用数(或Activator.CreateInstance(...)等)相同.