首页 >后端开发 >C++ >如何在 C# 中使用参数化构造函数实例化泛型类型?

如何在 C# 中使用参数化构造函数实例化泛型类型?

Susan Sarandon
Susan Sarandon原创
2025-01-09 12:27:49931浏览

C#泛型类型及带参数构造函数的实例化

假设你有一个接受泛型类型的泛型方法,并且你想用特定的构造函数参数实例化该类型的实例。然而,该类型的构造函数需要一个参数,你不知道是否可以这样做。

以下代码片段演示了在泛型方法中创建水果对象的尝试:

<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类处理。

虽然这种方法允许你实例化带有参数化构造函数的类型,但必须确保类型定义中存在特定的构造函数。依赖这种方法可能表明潜在的代码异味,建议你应该探索其他设计方案。

How Can I Instantiate Generic Types with Parameterized Constructors in C#?

以上是如何在 C# 中使用参数化构造函数实例化泛型类型?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn