创建其构造函数需要参数的泛型类型的实例?

如果BaseFruit有一个接受的构造函数int weight我可以用这种通用方法实例化一块水果吗?

public void AddFruit<T>()where T: BaseFruit{

BaseFruit fruit = new T(weight); /*new Apple(150);*/

fruit.Enlist(fruitManager);

}

在注释后面添加了一个示例。似乎只有提供BaseFruit无参数构造函数,然后通过成员变量填写所有内容,我才能做到这一点。用我的真实代码(不是关于水果),这是不切实际的。

因此,看来 都无法通过约束来解决。从答案中可以找到三种候选解决方案:

  • 工厂模式
  • 反射
  • 活化剂

我倾向于认为反射是最不干净的一种,但是我无法在其他两种之间做出选择。

回答:

另外一个简单的例子:

return (T)Activator.CreateInstance(typeof(T), new object[] { weight });

请注意,在T上使用new()约束只是为了使编译器在编译时检查公共的无参数构造函数,用于创建该类型的实际代码是Activator类。

您将需要确保自己与现有的特定构造函数有关,并且这种要求可能是代码味道(或者,您应该在c#的当前版本中尽量避免这种情况)。

以上是 创建其构造函数需要参数的泛型类型的实例? 的全部内容, 来源链接: utcz.com/qa/397307.html

回到顶部