C# 单例模式的不同写法对静态变量的影响
2016-04-14 17:20
351 查看
今天遇到一个非常奇怪的问题,调试了半天都没搞好,最后只好加了一些判断才搞定,回过头来找原因,才发现原因让我非常无语
于是对单例模式和静态变量做了一下测试
,总结了一下规律
首先是C#6.0最新出来的写法,当执行构造函数时,Date2的值是正确的
然后,将Date2的顺序调整一下,改到类的末尾
然后就发现在构造函数执行的时候,Date2的值居然是DateTime的初始值了,我猜测如果是引用类型的变量,估计就是null了
继续尝试单例的第二种写法
可以看到,第二种写法的情况下,Date2也没有被初始化
再尝试第三种写法
用这种写法,Date2的值正确了
百度了一下,发现在没有写静态的构造函数时,静态变量的初始化是按文本的顺序执行的,所以第一次尝试是正确的,而后两次尝试不对
至于在非单例模式类的构造函数中,Date2的值都是正确的,不受顺序影响
所以单例模式还是老老实实按第三种写法比较好,不要偷懒
不过单例模式中写静态变量的估计也少,把静态变量都放到其他的类中就无所谓了,但是静态变量的初始化顺序问题可能还是需要注意的
于是对单例模式和静态变量做了一下测试
,总结了一下规律
首先是C#6.0最新出来的写法,当执行构造函数时,Date2的值是正确的
然后,将Date2的顺序调整一下,改到类的末尾
然后就发现在构造函数执行的时候,Date2的值居然是DateTime的初始值了,我猜测如果是引用类型的变量,估计就是null了
继续尝试单例的第二种写法
可以看到,第二种写法的情况下,Date2也没有被初始化
再尝试第三种写法
用这种写法,Date2的值正确了
百度了一下,发现在没有写静态的构造函数时,静态变量的初始化是按文本的顺序执行的,所以第一次尝试是正确的,而后两次尝试不对
至于在非单例模式类的构造函数中,Date2的值都是正确的,不受顺序影响
所以单例模式还是老老实实按第三种写法比较好,不要偷懒
不过单例模式中写静态变量的估计也少,把静态变量都放到其他的类中就无所谓了,但是静态变量的初始化顺序问题可能还是需要注意的
相关文章推荐
- c#XML配置文件辅助类
- C# Socket SSL通讯笔记
- C# DataTable添加行和列
- C# 数组与 list 互相转换案例
- c#概念理解
- 适用于WebForm Mvc的Pager分页组件C#实现
- C#委托与事件的本质区别
- C#中(int)、int.Parse()、int.TryParse()和Convert.ToInt32()的区别
- c#中的保留两位小数并且四舍五入
- C#解析错误代码至错误提示字符串
- C# WinForm 技巧:控件截图
- C#第6周实验类的继承
- C# Dictionary使用
- [C#]exchange发送,收件箱操作类
- C#禁用numericUpDown控件鼠标中键滚轮消息响应
- c# 强制退出程序
- Codeforces 546E Soldier and Traveling 最大流 C#实现
- C#读取Excel的三种方式以及比较
- C#之结构struct(转)
- C# winform自动更新程序扫盲