对不起,如果这是一个新手问题,但我找不到像搜索S.O.我已经继承了一个C#程序来增强,它主要是一个DLL。C#初始化困惑 - 一个独立的静态类
我在一种伪代码中表达了DLL来解释我的问题: 该DLL有4个类,3个“常规”类和第4类公共静态变量,这些变量被全局变量用作全局变量该DLL
public class CMain
{
public CMain()
{
CFoo Foo = new CFoo(); // CFoo's c'tor is called
CBar Bar = new CBar(); // CBar's c'tor is called
CGlobals.v1 = 123;
}
}
public class CFoo
{
...
}
public class CBar
{
...
}
public sealed class CGlobals
{
public static int v1 = 0;
public static int v2 = 0;
}
当CMAIN从DLL的调用者实例化,在调试器中CGlobals的静态变量之前什么都发生初始化第一的休息。然后CMain的构造函数被调用。
当我查找C#初始化顺序时,我发现类的静态成员在类构造函数被调用之前被初始化,但是CGlobals不是任何成员;它只是坐在那里,独自一人,并从其他班级参考。
一切似乎都奏效,但它让我感到紧张,因为我不知道它遵循的规则。有人可以解释一下与此有关的初始化顺序规则是什么,以及这是否有什么危险?
您确定在调用CMain的构造函数之前初始化了CGLobals静态字段吗?为什么要在初次使用CGlobals时初次使用它? –