首页 > 后端开发 > C++ > 可以在 C# 中实例化具有参数化构造函数的泛型类型吗?

可以在 C# 中实例化具有参数化构造函数的泛型类型吗?

Barbara Streisand
发布: 2025-01-09 12:17:41
原创
772 人浏览过

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

本文探讨如何在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类具有一个需要整数weight作为参数的构造函数。

问题: 我们能否在这个泛型方法中,使用特定重量实例化一个水果对象?

答案: 可以,但不能直接像示例中那样。有两种方法:

1. 使用Activator类:

利用Activator类,我们可以动态实例化类型为T的对象,并将所需参数作为对象数组传递:

<code class="language-csharp">return (T)Activator.CreateInstance(typeof(T), new object[] { weight });</code>
登录后复制

请注意,这需要BaseFruit类具有一个公共的无参数构造函数,以便编译器进行检查,但实际上它使用Activator类来创建实例。

2. 使用带构造函数的泛型参数:

C#限制了使用需要参数的构造函数来实例化泛型类型。作为一种变通方法,您可以创建一个与类型同名的泛型参数,并在其定义中指定构造函数参数:

<code class="language-csharp">public void AddFruit<T>(T fruit) where T : new(int weight)
{
    fruit.Enlist(fruitManager);
}

// 使用示例:
AddFruit(new Apple(150));</code>
登录后复制

然而,这种方法通常不被推荐,因为它可能导致与泛型类型中构造函数要求相关的代码异味。

Can Generic Types with Parameterized Constructors Be Instantiated in C#?

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

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板