首页 >后端开发 >C++ >如何将参数注入到 C# 中的泛型构造函数实例中?

如何将参数注入到 C# 中的泛型构造函数实例中?

Barbara Streisand
Barbara Streisand原创
2025-01-09 12:22:44871浏览

How Can I Inject Parameters into Generic Constructor Instances in C#?

将参数注入到泛型构造函数实例中

在需要创建特定类型实例的泛型方法的上下文中,出现了问题:我们如何处理该类型的构造函数需要参数的情况?考虑这样一种情况:BaseFruit 拥有一个接受整数权重的构造函数。我们可以通过以下方式在通用方法中实例化一个水果吗:

public void AddFruit<T>() where T: BaseFruit {
    BaseFruit fruit = new T(weight); // new Apple(150)
    fruit.Enlist(fruitManager);
}

在提供的示例中,我们可以观察到尝试实例化权重为 150 的 Apple 实例。但是,这种方法并不可行除非 BaseFruit 配备无参数构造函数,允许随后分配成员变量,否则可行。不幸的是,在实际场景中,这种方法可能不方便。

为了解决这个问题,我们可以利用 Activator 类,如以下简化示例所示:

return (T)Activator.CreateInstance(typeof(T), new object[] { weight });

请注意,使用T 上的 new() 约束只是为了确保编译器在编译期间验证公共无参数构造函数是否存在。 Activator 类最终负责类型创建过程。

验证您打算使用的特定构造函数是否存在至关重要。此外,值得考虑这样的要求是否必要,因为它可能表明当前 C# 实现中可以避免的代码设计问题。

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

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