Closed. This question needs details or clarity。它当前不接受答案。
想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
5年前关闭。
考虑这样的类:
然后使用等于
实例化将如何创建?外观如何?
我对Java和C#感兴趣。
从我的阅读中,Java会创建一个具有基本类型转换的通用类,而在C#中,
想改善这个问题吗?添加详细信息并通过editing this post阐明问题。
5年前关闭。
考虑这样的类:
class Foo<T>
{
private T myField;
public void Set(T x)
{
myField = x;
}
}
然后使用等于
T
,int
(值类型)和bool
,String
的List
实例化它。实例化将如何创建?外观如何?
我对Java和C#感兴趣。
从我的阅读中,Java会创建一个具有基本类型转换的通用类,而在C#中,
int
和bool
将有两个类,而String
和List
将有一个类,因为它们是参考值(这是真的吗?静态字段呢?)。 最佳答案
注意这里我假设是常规的CLR-没有AOT等。
在IL级别:Foo<T>
有一个定义;无论T
,IL都是相同的(共享的)。
在JIT级别:对每个(共享的)引用类型参数(每个通用参数)一次对类型进行jitted,对每个(单独的)值类型参数进行一次jited。因此,Foo<string>
和Foo<List<...>>
的JIT是共享的,而Foo<int>
和Foo<bool>
的每个JIT都是单独的。
创建的对象/实例的数量与new Foo<...>(...)
调用(或Activator.CreateInstance(...)
等)的数量相同。