为了账号安全,请及时绑定邮箱和手机立即绑定

单例模式的静态实现

单例模式的静态实现

慕村9548890 2018-12-06 13:30:30
看李会军的帖子:http://www.cnblogs.com/Terrylee/archive/2005/12/09/293509.html对静态初始化不理解,不明白为什么要搞这么复杂。这是我的实现: public class Singleton { static Singleton instance = new Singleton(); Singleton() { } public static Singleton GetInstence { get { return instance; } } }请问这个有什么缺点? 李会军的原文如下: 1public sealed class Singleton 2{ 3 static readonly Singleton instance=new Singleton(); 4 5 static Singleton() 6 { 7 } 8 9 Singleton()10 {11 }1213 public static Singleton Instance14 {15 get16 {17 return instance;18 }19 }20}21看到上面这段富有戏剧性的代码,我们可能会产生怀疑,这还是Singleton模式吗?在此实现中,将在第一次引用类的任何成员时创建实例。公共语言运行库负责处理变量初始化。该类标记为 sealed 以阻止发生派生,而派生可能会增加实例。此外,变量标记为 readonly,这意味着只能在静态初始化期间(此处显示的示例)或在类构造函数中分配变量。 该实现与前面的示例类似,不同之处在于它依赖公共语言运行库来初始化变量。它仍然可以用来解决 Singleton 模式试图解决的两个基本问题:全局访问和实例化控制。公共静态属性为访问实例提供了一个全局访问点。此外,由于构造函数是私有的,因此不能在类本身以外实例化 Singleton 类;因此,变量引用的是可以在系统中存在的唯一的实例。由于 Singleton 实例被私有静态成员变量引用,因此在类首次被对 Instance 属性的调用所引用之前,不会发生实例化。这种方法唯一的潜在缺点是,您对实例化机制的控制权较少。在 Design Patterns 形式中,您能够在实例化之前使用非默认的构造函数或执行其他任务。由于在此解决方案中由 .NET Framework 负责执行初始化,因此您没有这些选项。在大多数情况下,静态初始化是在 .NET 中实现 Singleton 的首选方法。
查看完整描述

2 回答

?
精慕HU

TA贡献1845条经验 获得超8个赞

你两不是 一样的吗 ?
查看完整回答
反对 回复 2018-12-09
?
慕的地10843

TA贡献1785条经验 获得超8个赞

他应该说了很清楚 从多线程方面考虑
查看完整回答
反对 回复 2018-12-09
  • 2 回答
  • 0 关注
  • 365 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信