c#反射获取单例对象的实例

object obj = null;
if (classItem.BaseType.Name == "Singleton`1")
{
	obj = classItem.BaseType.GetProperty("Instance").GetValue(null);
}
else
{
	obj = Activator.CreateInstance(classItem);
}

反射创建实例,最常用的是在插件加载时。如果这个类是单例模式的,再使用CreateInstance,不会直接调用Instance的那个实例,而是又创建了一个。会出现明明应该单例调用的地方,数据不一致的情况。

此时,就需要了解怎么反射调用Instance实例。

 

假设单例模板如下:

// 本单例模板代码来自https://www.cnblogs.com/zhouzl/archive/2019/04/11/10687909.html
public abstract class Singleton where T : class
{
    // 这里采用实现5的方案,实际可采用上述任意一种方案
    class Nested
    {
        // 创建模板类实例,参数2设为true表示支持私有构造函数
        internal static readonly T instance = Activator.CreateInstance(typeof(T), true) as T;
    }
    private static T instance = null;
    public static T Instance { get { return Nested.instance; } }
}

 

你可能感兴趣的:(windows程序设计,设计模式,编程基础)