public class Canshu
    {
       public bool Is_start = true;
        private static Canshu instance = null;
        private static readonly object padlock = new object();[System.Xml.Serialization.XmlIgnore]
        public static Canshu Instance
        {
            get 
            {
                lock (padlock)
                {
                    if (instance == null)
                    {
                        instance = new Canshu();
                    }
                    return instance;
                }
            }
        }
    }
class A
{
 private Canshu canshu = Canshu.Instance;
}class B
{
 private Canshu canshu = Canshu.Instance;
}
为什么在A中修改“this.canshu.Is_start=false;”B中并变化,何故?

解决方案 »

  1.   

    晕!你把 private static Canshu instance  改为 public static Canshu instance,然后在A和B的具体方法中调用 Canshu.instance就行了。什么“单例”?!
      

  2.   

    这个问题怎么总有人问。CLR via C# 写得很清楚。如果要在多线程上保证单例能工作,唯一而且经典的做法是预先初始化:class Singleton
    {
        private static Singleton instance = new Singleton();
        private Singleton() { }
        public static Singleton GetInstance() { return instance; }
    }如果你还不明白就去翻书。
      

  3.   

    可能是我引用的关系,我是这样引用的
    class A
    {
     private Canshu canshu = Canshu.Instance;
    public void judge()
    {
       B b=new class B();
    }
    }class B
    {
     private Canshu canshu = Canshu.Instance;
    }
    B是A一个方法中用到的变量,并不是A中的全局变量,3楼的方法也是一样,同时1楼也看不懂所以没回复
      

  4.   

    1楼的意思是“单例”仅仅是个概念,public static就解决了...你非要照搬几十年前订下的八股文追求形式上的相同...ps:.NET是纯OO的,没有什么全局变量...
      

  5.   

    好像知道原因了,在A中,有序列化和反序列化this.canshu.如果注释掉反序列化,他们都是单例,但是反序列化以后,A中的this.canshu便于B中不是同一个实例了,但是保存数据和序列化又是必须的,这样的虽然找到原因了,但还是没有好的解决一个实例的办法
      

  6.   

    谢谢,各位,问题解决,我在canshu里进行反序列化