单例模式——继承使用方式

TriggerF / 2023-08-24 / 原文

namespace Feng.FramWorkDesign
{
public class Singleton<T> where T: Singleton<T>
{
private static T mInstance;
public static T MInstance
{
get
{
if (mInstance==null)
{
var type = typeof(T);
var ctors = type.GetConstructors(BindingFlags.Instance | BindingFlags.NonPublic);
var ctor = Array.Find(ctors, c => c.GetParameters().Length == 0);

if (ctor==null)
{
throw new Exception("Non Public Constructor Not Fount in "+type.Name);
}

mInstance= ctor.Invoke(null) as T;
}
return mInstance;
}
}
}
}