当前位置:  开发笔记 > 编程语言 > 正文

Activator.CreateInstance(string)和Activator.CreateInstance <T>()的区别

如何解决《Activator.CreateInstance(string)和Activator.CreateInstance<T>()的区别》经验,为你挑选了1个好方法。

不,这不是关于泛型的问题.

我有一个带有内部构造函数的几个类的工厂模式(如果没有通过工厂,我不希望它们被实例化).

我的问题是CreateInstance失败了"没有为此对象定义的无参数构造函数"错误,除非我在非公共参数上传递"true".

// Fails
Activator.CreateInstance(type);

// Works
Activator.CreateInstance(type, true);

我想让工厂变得通用,使其更简单,如下所示:

public class GenericFactory where T : MyAbstractType
{
    public static T GetInstance()
    {
        return Activator.CreateInstance();
    }
}

但是,我无法找到如何传递"true"参数,以接受非公共构造函数(内部).

我错过了什么或者不可能吗?



1> Kilhoffer..:

为了解决这个问题,你不能只改变你的使用方式:

public class GenericFactory where T : MyAbstractType
{
    public static T GetInstance()
    {
        return Activator.CreateInstance(typeof(T), true);
    }
}

您的工厂方法仍然是通用的,但对激活器的调用不会使用泛型过载.但是你仍然应该达到同样的效果.

推荐阅读
mobiledu2402851323
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有