Exemplo n.º 1
0
        private static void MultiThreadingEx()
        {
            Thread t1 = new Thread(
                new ThreadStart(() =>
            {
                for (int i = 0; i < 3; i++)
                {
                    SingletonA.GetInstance();
                    Console.WriteLine("H1: " + SingletonA.Mensaje);
                    //Thread.Sleep(1000);
                    var instanciasinglemth1 = SingletonLazy.Instance;
                    //Console.WriteLine("H1: " + SingletonLazy.Mensaje);
                    //Thread.Sleep(1000);
                }
            }));

            Thread t2 = new Thread(
                new ThreadStart(() =>
            {
                for (int i = 0; i < 3; i++)
                {
                    SingletonA.GetInstance();
                    Console.WriteLine("H2: " + SingletonA.Mensaje);
                    //Thread.Sleep(1000);
                    var instanciasinglemth1 = SingletonLazy.Instance;
                    //Console.WriteLine("H2: " + SingletonLazy.Mensaje);
                    // Thread.Sleep(1000);
                }
            }));

            t1.Start();
            t2.Start();
        }
Exemplo n.º 2
0
        public void Test_Inherence_OfChildrens_ChildrensAre_Not_TheSame()
        {
            SingletonA <SingletonB> firstSon  = SingletonB.Instance;
            SingletonA <SingletonB> secondSon = SingletonB.Instance;

            SingletonA <SingletonC> firstDaughter  = SingletonC.Instance;
            SingletonA <SingletonC> secondDaughter = SingletonC.Instance;

            Assert.AreNotSame(firstSon, firstDaughter);
        }
Exemplo n.º 3
0
        public void Test_Inherence_Of_Childrens()
        {
            SingletonA <SingletonB> firstSon  = SingletonB.Instance;
            SingletonA <SingletonB> secondSon = SingletonB.Instance;

            SingletonA <SingletonC> firstDaughter  = SingletonC.Instance;
            SingletonA <SingletonC> secondDaughter = SingletonC.Instance;

            Assert.AreSame(firstSon, secondSon);
            Assert.AreSame(firstDaughter, secondDaughter);
        }
Exemplo n.º 4
0
 public static SingletonA GetInstance()
 {
     if (_instancia == null)
     {
         _instancia = new SingletonA();
         Mensaje    = "Se ha creado una instancia de SA.";
     }
     else
     {
         Mensaje = string.Empty;
     }
     return(_instancia);
 }
Exemplo n.º 5
0
 public static SingletonA GetSingletonA()
 {
     if (singletonA == null)
     {
         lock (_object)
         {
             if (singletonA == null)
             {
                 singletonA = new SingletonA();
             }
         }
     }
     return(singletonA);
 }
Exemplo n.º 6
0
        public void Test()
        {
            /// 使用传统Singleton方式访问,一样可以保证唯一性
            SingletonA sa1 = SingletonA.Instance;
            SingletonA sa2 = SingletonA.Instance;

            Assert.AreEqual <int>(sa1.GetHashCode(), sa2.GetHashCode());

            /// 也可以绕过Instance静态属性,直接实例化那些准Singleton类型
            SingletonA sa3 = new SingletonA();

            Assert.IsNotNull(sa3);
            Assert.AreNotEqual <int>(sa1.GetHashCode(), sa3.GetHashCode());
        }
Exemplo n.º 7
0
        static void Main(string[] args)
        {
            //三次打印相同的hashcode 使用的同一个实例
            for (int i = 0; i < 3; i++)
            {
                //饿汉
                SingletonA singletonA = SingletonA.GetInstance();
                singletonA.PrintMsg();
            }

            //三次打印相同的hashcode 使用的同一个实例
            for (int i = 0; i < 3; i++)
            {
                //懒汉
                SingletonB singletonB = SingletonB.GetInstance();
                singletonB.PrintMsg();
            }

            Console.ReadKey();
        }