关于静态类的执行顺序问题 Winform程序,创建一个静态类,用作全局变量的初始化。程序启动时,偶尔会出现“类型初始值设定项引发异常”这样的提示,原因应该是因为该静态类的成员变量没有初始化完成,就被调用了。请教各位前辈如何才能保证该静态类优先执行呀?谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在我的知识结构中静态的东西都必须是常量值 所以怎么可能初始化未完成呢而且new一个对象时,会先构造静态类(第一次new的时候) 在form的构造函数中使用静态类的方法或属性。他就自动构造静态类了。没有优先的概念。你按照你想要的顺序写代码就好了。 注意,每个静态类,如果你不提供静态构造函数,编译器会自动添加一个如果你加了,编译器则不加,结果就会有问题例如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了。 不同系统间的接口对接问题。 System.Threading.Timer 怎么挂起。 弱问,FlagsAttribute标识枚举类型结果怎么进行遍历? ibatis 如何获取任务管理器中的应用程序的列表 300分求版本控制软件 拼sql字符串出错,请高手指导一下 C#操作excel行颜色问题 求教:软件打开的速度慢 请问一个关于socket 接受多个连接的问题 System.Nullable<int> 怎么添加成员 show()方法无法将窗体显示出来
如果你加了,编译器则不加,结果就会有问题
例如
public class b{
static int a = 1;
static someobject = new .... ;
如果没有默认构造函数,这样写没有问题。
如果有,最好把这些初始化语句写在构造函数中。
get{
if(_Abc==null)
{
_Abc = 得到初始化的ABC对象();
}
return _Abc;
}
}而不需要写到所在的class的static实例化方法中。避免把代码写到static实例化方法中,vs就可以帮你调试bug了。