对于一个单例模式,运行中只有一个类的实例,举个小例子吧《
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类里赋的值,这样不就不正确了吗? 有没有这样的情况发生?求高手解释。如果有,该怎么办?
Str属性不应该设置为static,应该这样定义:
public string Str{get;set;}
访问时,这样调用:
Singleton.Instance.Str
设置为static,这里的单例就失去了意义。
在类A里调用应为Str="a",在类B里调用应为Str="b" ...
这样的情况根本不应该用单例,分别在类A与类B的实例中创建这个现在名叫Singleton类的对象。
如果是单例,一个实例的Singleton类,你公开一个静态属性,大家都可以来操作,为这个静态属性赋值,这个没问题,单关键是,如果A做了赋值a操作,这个操作会不会影响B的正常使用,如果A和B操作对A、B本身的运行都没有影响的话,你这个属性是可以这样公开的。
其实最好是你给具体例子,大家才好帮你分析哪种方案更合适。只说概念性的东西,我作为回答者,说真的不知道你想实现什么。所以没办法给你更合适的建议。
希望对你有用!