今天遇到一个非常奇怪的问题,调试了半天都没搞好,最后只好加了一些判断才搞定,回过头来找原因,才发现原因让我非常无语
于是对单例模式和静态变量做了一下测试
,总结了一下规律
首先是C#6.0最新出来的写法,当执行构造函数时,Date2的值是正确的
然后,将Date2的顺序调整一下,改到类的末尾
然后就发现在构造函数执行的时候,Date2的值居然是DateTime的初始值了,我猜测如果是引用类型的变量,估计就是null了
继续尝试单例的第二种写法
可以看到,第二种写法的情况下,Date2也没有被初始化
再尝试第三种写法
用这种写法,Date2的值正确了
百度了一下,发现在没有写静态的构造函数时,静态变量的初始化是按文本的顺序执行的,所以第一次尝试是正确的,而后两次尝试不对
至于在非单例模式类的构造函数中,Date2的值都是正确的,不受顺序影响
所以单例模式还是老老实实按第三种写法比较好,不要偷懒
不过单例模式中写静态变量的估计也少,把静态变量都放到其他的类中就无所谓了,但是静态变量的初始化顺序问题可能还是需要注意的
991

被折叠的 条评论
为什么被折叠?



