gpt4 book ai didi

c# - Activator.CreateInstance(string) 和 Activator.CreateInstance() 的区别

转载 作者:可可西里 更新时间:2023-11-01 08:36:20 25 4
gpt4 key购买 nike

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

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

我的问题是 CreateInstance 失败并出现“没有为此对象定义无参数构造函数”错误,除非我在非公共(public)参数上传递“true”。

例子

// Fails
Activator.CreateInstance(type);

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

我想使工厂通用化以使其更简单一些,如下所示:

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

但是,我无法找到如何传递“true”参数以使其接受非公共(public)构造函数(内部)。

我是不是漏掉了什么或者这不可能?

最佳答案

为了解决这个问题,你不能直接改变你的用法吗:

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

您的工厂方法仍然是通用的,但对激活器的调用将不会使用通用重载。但是您仍然应该获得相同的结果。

关于c# - Activator.CreateInstance(string) 和 Activator.CreateInstance<T>() 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57439/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com