首页 新闻 会员 周边 捐助

关于单例模式

0
悬赏园豆:40 [已解决问题] 解决于 2012-07-11 15:57

对于一个单例模式,运行中只有一个类的实例,举个小例子吧《

public sealed class Singleton
  {
  private static readonly Singleton instance = new Singleton();
  private Singleton(){}
  public static Singleton Instance
  {
    get
    {
    return instance;
    }
  }

public static string Str{get;set;}
  }

问题来了,请看紫色的部分,在这个单例类中有一个公开的公共静态属性,需要在不同的地方为其赋不同的值,比如,在类A里调用应为Str="a",在类B里调用应为Str="b"; 我这样每次调用的时候都要为Str赋值,

我想问: 有没有可能出现我刚在类A里面为Str赋值了Str="a",刚好同一时刻类B也要访问Str,可是他得到的值是在A类里赋的值,这样不就不正确了吗? 有没有这样的情况发生?求高手解释。如果有,该怎么办?

世界万物的主页 世界万物 | 菜鸟二级 | 园豆:276
提问于:2012-07-10 20:26
< >
分享
最佳答案
2

Str属性不应该设置为static,应该这样定义:

public string Str{get;set;}

访问时,这样调用:

Singleton.Instance.Str

设置为static,这里的单例就失去了意义。

在类A里调用应为Str="a",在类B里调用应为Str="b" ...

这样的情况根本不应该用单例,分别在类A与类B的实例中创建这个现在名叫Singleton类的对象。

收获园豆:30
dudu | 高人七级 |园豆:29570 | 2012-07-10 21:48
其他回答(1)
0

如果是单例,一个实例的Singleton类,你公开一个静态属性,大家都可以来操作,为这个静态属性赋值,这个没问题,单关键是,如果A做了赋值a操作,这个操作会不会影响B的正常使用,如果A和B操作对A、B本身的运行都没有影响的话,你这个属性是可以这样公开的。

其实最好是你给具体例子,大家才好帮你分析哪种方案更合适。只说概念性的东西,我作为回答者,说真的不知道你想实现什么。所以没办法给你更合适的建议。

希望对你有用!

收获园豆:10
David丶Beckham | 园豆:193 (初学一级) | 2012-07-11 02:08
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册