繁体   English   中英

在C#中,是否在调用main()方法之前初始化所有静态变量?

[英]In C#, do all static variables get initialized before the main() method is called?

我特别关注的是:

  • 外部DLL中包含的在引用/依赖类中定义的类中的静态变量。 在我的示例中,该第三方程序集中的任何类型都没有引用,直到该程序的后面。 (假设执行时间为5分钟)。

这样仅会加载该第三方程序集的静态变量吗?

谢谢,瑞

根据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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM