常规单例模式实战

文章介绍了一种在C#中使用泛型创建单例模式的方法。通过限制类型参数为类并检查无公共构造函数,确保了单例的唯一性。代码示例展示了如何静态初始化单例,并通过Activator.CreateInstance进行私有构造函数的实例化。
摘要由CSDN通过智能技术生成

单例模式在使用中可以建立一个单例的泛型。

在其他类型调用的时侯直接在类型的后面加上 NormalSingleton<ConfigSupports>

其他地方使用到ConfigSupports.Instance()调用。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;

namespace Nova.LCT.FloorTileScreen
{
    /// <summary>
    /// 常规单例
    /// </summary>
    /// <typeparam name="T"></typeparam>
    public class NormalSingleton<T> where T : class
    {
        private static T _instance;
        private static object _initLock = new object();

        public static T Instance
        {
            get
            {
                if (_instance == null)
                {
                    CreateInstance();
                }
                return _instance;
            }
        }

        private static void CreateInstance()
        {
            lock (_initLock)
            {
                if (_instance == null)
                {
                    Type t = typeof(T);

                    // Ensure there are no public constructors...
                    // 这里确保没有其它的public构造函数了,既没有可以通过其它方法new这个类
                    ConstructorInfo[] ctors = t.GetConstructors();
                    if (ctors.Length > 0)
                    {
                        //throw new InvalidOperationException(String.Format("{0} 
                        //has at least one accesible ctor making it impossibleto
                         //enforce DyhSingleton behaviour", t.Name));
                        _instance = (T)Activator.CreateInstance(t, false);
                    }
                    else
                    {
                        // Create an instance via the private constructor
                        _instance = (T)Activator.CreateInstance(t, true);
                    }
                }
            }
        }
    }
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值