我只是对以下代码感到好奇:
public static class Container<T>
{
public static readonly T[] EmptyArray = new T[0];
}
据我了解,当执行以下代码时,静态类 Container 将被初始化:
...
var emptyArray = Container<int>.EmptyArray;
...
我对吗 ?任何有关静态泛型类/成员初始化的解释将不胜感激。提前致谢。
保证静态字段在访问之前已初始化。 (此外,如果还有静态构造函数,则所有静态字段都将在静态构造函数运行之前初始化。)
对于泛型类,静态初始化基于每个类型,因此Container<int>
表现得好像它是一个完全不同的类Container<double>
。对于泛型类的所有静态部分来说实际上都是如此 - 每种类型都有自己的“副本”。
一个例子将更清楚地说明最后一点:
static class Foo<T>
{
static int count = 0;
public static int Increment()
{
return ++count;
}
}
public class Program
{
public static void Main()
{
Console.WriteLine(Foo<int>.Increment());
Console.WriteLine(Foo<int>.Increment());
Console.WriteLine(Foo<double>.Increment());
}
}
Output:
1
2
1
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)