我特别关心的是:
- 在引用/依赖类中定义的类中的静态变量,包含在外部 DLL 中。在我的示例中,该第三方程序集中的任何类型都不会被引用,直到程序的后期。(假设执行 5 分钟)。
是否只会加载该第三方程序集的静态变量?
谢谢,瑞
我特别关心的是:
是否只会加载该第三方程序集的静态变量?
谢谢,瑞
根据 C# 规范,它说:
如果类中存在静态构造函数,则在执行该静态构造函数之前立即执行静态字段初始值设定项。否则,静态字段初始化器在第一次使用该类的静态字段之前的依赖于实现的时间执行。这个例子
whiteout 静态构造函数您无法准确预测静态变量的初始化时间,但可以保证在首次使用之前对其进行初始化。但可以肯定的是,在您引用它们的程序集之前它们没有被初始化
所有静态字段在首次使用之前都会被初始化。这可以通过编译器显式声明或隐式提供的类型初始化程序(静态构造函数)来完成。在类声明中没有赋值的静态字段将被初始化为其对应类型的默认值。
如果您的静态字段是其构造函数可能抛出异常的对象引用,请小心:
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,如上所示。