假设你有一个接受泛型类型的泛型方法,并且你想用特定的构造函数参数实例化该类型的实例。然而,该类型的构造函数需要一个参数,你不知道是否可以这样做。
以下代码片段演示了在泛型方法中创建水果对象的尝试:
<code class="language-csharp">public void AddFruit<T>() where T : BaseFruit { BaseFruit fruit = new T(weight); /*new Apple(150);*/ fruit.Enlist(fruitManager); }</code>
这种方法可能会失败,因为BaseFruit
没有无参数构造函数。它需要一个整数参数来指定水果的重量。
为了解决这个问题,C#提供了Activator
类。你可以使用Activator.CreateInstance
方法来创建类型的实例,并传递一个对象数组作为构造函数的参数:
<code class="language-csharp">return (T)Activator.CreateInstance(typeof(T), new object[] { weight });</code>
注意,对T
使用new()
约束只能确保编译器在编译时检查公共无参数构造函数。用于创建类型的实际代码由Activator
类处理。
虽然这种方法允许你实例化带有参数化构造函数的类型,但必须确保类型定义中存在特定的构造函数。依赖这种方法可能表明潜在的代码异味,建议你应该探索其他设计方案。
以上是如何在 C# 中使用参数化构造函数实例化泛型类型?的详细内容。更多信息请关注PHP中文网其他相关文章!