C#泛型类型实例化与构造函数参数
在构建泛型类型时,一个常见问题是:如何在泛型方法中实例化一个需要参数的构造函数?例如,BaseFruit
类有一个接收整数类型的重量参数的构造函数。
如何在泛型方法中实例化指定重量的水果?
以下代码尝试在泛型方法中创建一个指定重量的水果实例:
<code class="language-csharp">public void AddFruit<T>() where T : BaseFruit { BaseFruit fruit = new T(weight); /*new Apple(150);*/ fruit.Enlist(fruitManager); }</code>
这种方法只有在BaseFruit
具有无参数构造函数(随后通过成员变量修改属性)的情况下才可行。然而,在实际应用中,这可能并不实用。
替代方案:
可以使用Activator
类:
<code class="language-csharp">return (T)Activator.CreateInstance(typeof(T), new object[] { weight });</code>
这种情况下,对T
的new()
约束确保在编译时存在一个公共的无参数构造函数,而Activator
类负责实际的类型创建。
注意事项:
虽然此方案提供了一种解决方法,但必须在代码中验证特定构造函数的存在。此外,依赖这种方法可能表明代码层面存在问题,应尽量避免在当前版本的C#中使用这种方法。
以上是泛型类型实例化可以处理 C# 中的构造函数参数吗?的详细内容。更多信息请关注PHP中文网其他相关文章!