CultivateImmortal/Assets/Scripts/Framework/Singleton/BaseManager.cs
2024-11-14 18:15:51 +08:00

60 lines
1.8 KiB
C#

using System;
using System.Collections;
using System.Collections.Generic;
using System.Reflection;
using UnityEngine;
/// <summary>
/// 单例模式基类 主要目的是避免代码的冗余 方便我们实现单例模式的类
/// </summary>
/// <typeparam name="T"></typeparam>
public abstract class BaseManager<T> where T:class//,new()
{
private static T instance;
//判断单例模式对象 是否为null
protected bool InstanceisNull => instance == null;
//用于加锁的对象
protected static readonly object lockObj = new object();
//属性的方式
public static T Instance
{
get
{
if(instance == null)
{
lock (lockObj)
{
if (instance == null)
{
//instance = new T();
//利用反射得到无参私有的构造函数 来用于对象的实例化
Type type = typeof(T);
ConstructorInfo info = type.GetConstructor(BindingFlags.Instance | BindingFlags.NonPublic,
null,
Type.EmptyTypes,
null);
if (info != null)
instance = info.Invoke(null) as T;
else
Debug.LogError("没有得到对应的无参构造函数");
//instance = Activator.CreateInstance(typeof(T), true) as T;
}
}
}
return instance;
}
}
//方法的方式
//public static T GetInstance()
//{
// if (instance == null)
// instance = new T();
// return instance;
//}
}