首页 新闻 会员 周边 捐助

c# 单例模式 疑问

0
悬赏园豆:10 [已解决问题] 解决于 2015-09-09 14:45
单例模式实现:
 
 class Singleton     {         private static Singleton _Instance = new Singleton();         public static Singleton Instance{ get{return _Instance;} }         private Singleton()         {         }     }

单例模式这样实现有什么问题?网上看了很多单例模式的实现例子,为什么不这样实现呢?是不是因为没有延迟初始化才不这样实现?谢谢园友解答!
磨剑的主页 磨剑 | 初学一级 | 园豆:141
提问于:2015-09-08 17:26
< >
分享
最佳答案
0

这样实现实际上也是延迟加载..如果这个类里只有一个单例的话.

收获园豆:4
吴瑞祥 | 高人七级 |园豆:29449 | 2015-09-08 17:31

那这样的话,这是最简单的实现方式了,没有多线程的问题,又有延迟初始化的效果。

磨剑 | 园豆:141 (初学一级) | 2015-09-08 17:59

@磨剑: 要看场景,比如我有一个静态工厂,里面全是各个类的单例.这个东西就不能实现延迟加载

吴瑞祥 | 园豆:29449 (高人七级) | 2015-09-08 18:02

@吴瑞祥: 其实我还是不理解为什么这个能延迟初始化,为什么一个类里面有很多单例时就不行。不知道这是哪方面的知识,我搜索哪些关键词可以找到相关内容?谢谢指点,新手来的,刚开始接触c#。。

磨剑 | 园豆:141 (初学一级) | 2015-09-08 18:08

@磨剑: 因为静态成员的初始化都会被放发静态构造函数中,当第一次调用静态成员的时候才会调用静态构造函数.对静态成员进行初始化

吴瑞祥 | 园豆:29449 (高人七级) | 2015-09-08 18:14

@吴瑞祥: 嗯,谢谢!我去看了相关的资料,静态成员是在创建第一个类实例或第一次被引用之前,并且在调用静态构造函数(如有存在)之前进行初始化。

磨剑 | 园豆:141 (初学一级) | 2015-09-09 10:34
其他回答(2)
0
单例模式的要点有三个;一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。
从具体实现角度来说,就是以下三点:一是单例模式的类只提供私有的构造函数,二是类定义中含有一个该类的静态私有对象,三是该类提供了一个静态的公有的函数用于创建或获取它本身的静态私有对象。
收获园豆:3
Firen | 园豆:5385 (大侠五级) | 2015-09-08 17:30

谢谢解答。

支持(1) 反对(0) 磨剑 | 园豆:141 (初学一级) | 2015-09-08 18:00
0

没必要额外增加一个属性,这样:

class Singleton

{

  public static readonly SingletonInstance = new Singleton();

}

收获园豆:3
Launcher | 园豆:45050 (高人七级) | 2015-09-09 09:45

谢谢解答!嗯,这样确实更加简单明了,readonly也限制它不能被修改。不过还是习惯用属性或者方法来访问数据。

支持(0) 反对(0) 磨剑 | 园豆:141 (初学一级) | 2015-09-09 10:38
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册