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
因为它们是引用值(这是真的吗?静态字段怎么样?).
请注意,我假设是常规CLR - 没有AOT等.
在IL级别:有一个定义Foo<T>
; 无论如何,IL都是相同的(共享的)T
.
在JIT级别:对于所有(共享)引用类型参数,以及每个(单独)值类型参数,类型被jitted(每个通用参数)一次.所以对于JIT 和是共享的,并且对于每个单独JIT 和.Foo<string>
Foo<List<...>>
Foo<int>
Foo<bool>
创建的对象/实例数与new Foo<...>(...)
调用数(或Activator.CreateInstance(...)
等)相同.
归档时间: |
|
查看次数: |
231 次 |
最近记录: |