Winform程序,创建一个静态类,用作全局变量的初始化。程序启动时,偶尔会出现“类型初始值设定项引发异常”这样的提示,原因应该是因为该静态类的成员变量没有初始化完成,就被调用了。请教各位前辈如何才能保证该静态类优先执行呀?谢谢

解决方案 »

  1.   

    在我的知识结构中静态的东西都必须是常量值 所以怎么可能初始化未完成呢而且new一个对象时,会先构造静态类(第一次new的时候)
      

  2.   

    在form的构造函数中使用静态类的方法或属性。他就自动构造静态类了。没有优先的概念。你按照你想要的顺序写代码就好了。
      

  3.   

    注意,每个静态类,如果你不提供静态构造函数,编译器会自动添加一个
    如果你加了,编译器则不加,结果就会有问题
    例如
    public class b{
    static int a = 1;
    static someobject = new .... ;
    如果没有默认构造函数,这样写没有问题。
    如果有,最好把这些初始化语句写在构造函数中。
      

  4.   

    类型的实例化方法(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了。