您的位置:首页 > 编程语言 > C#

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

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

于是对单例模式和静态变量做了一下测试



,总结了一下规律

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



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



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

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



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

再尝试第三种写法



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

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

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

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

不过单例模式中写静态变量的估计也少,把静态变量都放到其他的类中就无所谓了,但是静态变量的初始化顺序问题可能还是需要注意的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: