首页 > 后端开发 > C++ > 在 C# 中实例化泛型类型时如何将参数传递给构造函数?

在 C# 中实例化泛型类型时如何将参数传递给构造函数?

Susan Sarandon
发布: 2025-01-22 13:46:10
原创
306 人浏览过

How Can I Pass Arguments to a Constructor When Instantiating a Generic Type in C#?

将构造函数参数传递给 C# 中的泛型类型

在 C# 中使用参数化构造函数创建泛型类型的实例可能会带来挑战。 尝试直接实例化通常会导致错误:“创建变量实例时无法提供参数”。这是因为编译器在编译时并不知道具体的构造函数签名。

new() 约束仅允许无参数构造函数。要处理带参数的构造函数,常见的解决方案涉及使用工厂方法(通常表示为委托)。

以下是实现此目标的方法:

不要直接实例化泛型类型,而是将委托(例如 Func)传递给泛型方法。该委托将充当工厂,负责使用必要的构造函数参数创建对象。

示例:

<code class="language-csharp">public static string GetAllItems<T>(..., Func<ListItem, T> factoryMethod) {
  // ...
  List<T> tabListItems = new List<T>();
  foreach (ListItem listItem in listCollection) 
  {
    tabListItems.Add(factoryMethod(listItem));
  }
  // ...
}</code>
登录后复制

GetAllItems 方法现在接受 Func<ListItem, T> 委托。 该委托接受 ListItem 作为输入并返回 T 类型的实例。

用法:

<code class="language-csharp">GetAllItems<Foo>(..., l => new Foo(l)); </code>
登录后复制

在此示例中,lambda 表达式 l => new Foo(l) 用作工厂方法。它需要一个 ListItem (l) 并使用它通过 Foo 的构造函数创建一个新的 Foo 对象。 这有效地将 ListItem 参数传递给 Foo 构造函数。

通过将对象创建逻辑与泛型方法本身分离,这种方法允许灵活地实例化泛型类型,即使是那些具有参数化构造函数的类型。

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

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