线程安全单例类未提供预期的输出,请解释此输出背后的逻辑

时间:2019-06-22 09:06:51

标签: c# thread-safety singleton

我正在尝试使用Internet中找到的代码创建线程安全的Singleton对象。下面是我的代码。

public class SingleInstanceClass
    {
         public static int hitCount;
        private static readonly SingleInstanceClass instance = new SingleInstanceClass();
         private SingleInstanceClass()
        {
        }
        static SingleInstanceClass()
        { }
       public static SingleInstanceClass GetInstance
        {
             get
            {
                return instance;
            }

    }
        public void Display()
        {
            Console.WriteLine("Single Ton Class Function {0}",hitCount++);
        }
    }


//CLIENT CODE
class Program
    {
        static void Main(string[] args)
        {
            //Create 2 objects of the singleton class
            SingleInstanceClass obj1 = SingleInstanceClass.GetInstance;
            obj1.Display();
            SingleInstanceClass obj2 = SingleInstanceClass.GetInstance;
            obj2.Display();

            SingleInstanceClass obj3 = SingleInstanceClass.GetInstance;
            obj3.Display();
            SingleInstanceClass obj4 = SingleInstanceClass.GetInstance;
            obj4.Display();
            SingleInstanceClass obj5 = SingleInstanceClass.GetInstance;
            obj5.Display();//Validate if the address of obj1 and obj2 are same.
            //If object.ReferenceEquals() returns true objects are same
            //or else different.
            //In class is return same object again and again
            //It will print same objects.
            if (object.ReferenceEquals(obj1, obj2))
            {
                Console.WriteLine("Same objects");
            }
            else
            {
                Console.WriteLine("Different objects");
            }
            Console.ReadKey();
        }
    }
}

我希望,

第一个实例将给出以下输出 单音级功能0 单音级功能1 单音级功能2 单音级功能3 单音级功能4 相同的对象

第二个实例将显示以下内容

单音类功能5 单音级功能6 单音级功能7 单音级功能8 单音级功能9 相同的对象

,依此类推。

因为这是单例类,所以所有客户端实例仅共享一个实例。但我在所有情况下都无法实现

单音类功能0 单音级功能1 单音级功能2 单音级功能3 单音级功能4 相同的对象

为什么重置点击数。什么会给我期望的输出。

0 个答案:

没有答案