[英]In C#, do all static variables get initialized before the main() method is called?
我特别关注的是:
这样仅会加载该第三方程序集的静态变量吗?
谢谢,瑞
根据C#规范说:
如果类中存在静态构造函数,则在执行该静态构造函数之前立即执行静态字段初始化程序。 否则,将在首次使用该类的静态字段之前,在与实现相关的时间执行静态字段初始化程序。 这个例子
将静态构造函数泛白,您无法准确预测何时初始化静态变量,但是可以保证在首次使用静态变量之前对其进行初始化。 但可以肯定的是,在引用它们的程序集之前它们没有被初始化
所有静态字段在首次使用之前均已初始化。 这可以通过编译器显式声明或隐式提供的类型初始化器(静态构造函数)来完成。 在类声明中未分配值的静态字段将被初始化为其相应类型的默认值。
请注意,如果您的静态字段是对象引用,其构造函数可能会引发异常:
class Foo
{
public Foo() { throw new Exception("boom"); }
}
class Bar
{
private static Foo baz = new Foo();
public Bar()
{
//trying to create a Bar will throw TypeInitializationException
}
public static void BarNone()
{
//trying to call a static method on Bar will throw TypeInitializationException
}
}
如上所示,在首次使用Bar时(构造方法或调用Bar上的静态方法时),您将获得TypeInitializationException。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.