日期:2014-05-17  浏览次数:20732 次

关于静态类的执行顺序问题
Winform程序,创建一个静态类,用作全局变量的初始化。

程序启动时,偶尔会出现“类型初始值设定项引发异常”这样的提示,原因应该是因为该静态类的成员变量没有初始化完成,就被调用了。

请教各位前辈如何才能保证该静态类优先执行呀?谢谢

------解决方案--------------------
注意,每个静态类,如果你不提供静态构造函数,编译器会自动添加一个
如果你加了,编译器则不加,结果就会有问题
例如
public class b{
static int a = 1;
static someobject = new .... ;
如果没有默认构造函数,这样写没有问题。
如果有,最好把这些初始化语句写在构造函数中。
------解决方案--------------------
好好看看你代码,构造函数,静态值初始话,一个出现错误,调用其他的都会引发异常,你调用一个静态值时,对其他静态值也进行初始化.
------解决方案--------------------
引用:
类型初始值设定项引发异常 这个会是什么引起的呀?

类型的实例化方法(static实例化方法)会在你调用次类型所有方法和对象实例之前执行,这个“优先执行顺序”是不用怀疑的。你的问题,恰好是因为其优先执行了,才会出问题。

vs目前无法正确地调试类型的static实例化方法。当此方法出现异常时,调试其无法进入调试,因此可能会觉得测试和修改bug比较困难。

对于不需要不管是否需要都“急急忙忙初始化”的对象,你可以延迟初始化。例如写
private static MyType _Abc;

public static MyType ABC{
get{
    if(_Abc==null)
    {
        _Abc = 得到初始化的ABC对象();
    }
    return _Abc;
  }
}
而不需要写到所在的class的static实例化方法中。

避免把代码写到static实例化方法中,vs就可以帮你调试bug了。
------解决方案--------------------
你可以使用静态构造函数看看。静态构造函数先于实例构造函数执行。