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

泛型类型实例化可以处理 C# 中的构造函数参数吗?

Mary-Kate Olsen
发布: 2025-01-09 12:11:42
原创
123 人浏览过

Can Generic Type Instantiation Handle Constructor Arguments in C#?

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>
登录后复制

这种情况下,对Tnew()约束确保在编译时存在一个公共的无参数构造函数,而Activator类负责实际的类型创建。

注意事项:

虽然此方案提供了一种解决方法,但必须在代码中验证特定构造函数的存在。此外,依赖这种方法可能表明代码层面存在问题,应尽量避免在当前版本的C#中使用这种方法。

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

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