C# 单例模式的不同写法对静态变量的影响

来源:互联网 发布:淘宝联盟站长 编辑:程序博客网 时间:2024/05/29 08:00

今天遇到一个非常奇怪的问题,调试了半天都没搞好,最后只好加了一些判断才搞定,回过头来找原因,才发现原因让我非常无语

于是对单例模式和静态变量做了一下测试,总结了一下规律

首先是C#6.0最新出来的写法,当执行构造函数时,Date2的值是正确的

然后,将Date2的顺序调整一下,改到类的末尾

然后就发现在构造函数执行的时候,Date2的值居然是DateTime的初始值了,我猜测如果是引用类型的变量,估计就是null了

继续尝试单例的第二种写法

可以看到,第二种写法的情况下,Date2也没有被初始化

再尝试第三种写法

用这种写法,Date2的值正确了

百度了一下,发现在没有写静态的构造函数时,静态变量的初始化是按文本的顺序执行的,所以第一次尝试是正确的,而后两次尝试不对

至于在非单例模式类的构造函数中,Date2的值都是正确的,不受顺序影响

所以单例模式还是老老实实按第三种写法比较好,不要偷懒

不过单例模式中写静态变量的估计也少,把静态变量都放到其他的类中就无所谓了,但是静态变量的初始化顺序问题可能还是需要注意的

0 0
原创粉丝点击