zoukankan      html  css  js  c++  java
  • C# 泛型单例工厂

    核心代码,线程安全

        class SingletonFactory<T> where T : new()
        {
            private static T uniqueInstance;
            private static readonly object locker = new object();
            public static T GetInstance()
            {
                if (uniqueInstance == null)
                {
                    lock (locker)
                    {
                        if (uniqueInstance == null) uniqueInstance = new T();
                    }
                }
                return uniqueInstance;
            }
        }
    

    测试类

        class Person
        {
            public string Name { get; set; }
        }
    
        class Cat
        {
            public string Name { get; set; }
        }
    

    测试代码

            static void Main(string[] args)
            {
                var obj1 = SingletonFactory<Person>.GetInstance();
                obj1.Name = "张三";
                var obj2 = SingletonFactory<Person>.GetInstance();
                obj2.Name = "李四";
                Console.WriteLine($"obj1=obj2 :{ReferenceEquals(obj1, obj2)}");
                var obj3 = SingletonFactory<Cat>.GetInstance();
                obj3.Name = "咪咪";
                Console.WriteLine($"obj1=obj3 :{ReferenceEquals(obj1, obj3)}");
                Console.ReadKey();
            }
    

    结果

  • 相关阅读:
    AJAX注册
    文件上传加水印
    邮箱
    AJAX完整操作
    跨窗体操作
    容器布局
    EF异常类
    SQL查出字段横向拼接,如:1,2,3,4
    asp.net三层结构中,SQL助手类DbHelperSQL
    正则抓取页面信息
  • 原文地址:https://www.cnblogs.com/zhaoshujie/p/13252421.html
Copyright © 2011-2022 走看看