首页 > 后端开发 > C++ > 为什么 C# 中的通用开放类型列表初始化失败?

为什么 C# 中的通用开放类型列表初始化失败?

DDD
发布: 2025-01-11 06:00:42
原创
285 人浏览过

Why Does List Initialization Fail with a Generic Open Type in C#?

C# 通用开放类型列表初始化失败:解决方案

当使用像 Data<T> 这样的通用开放类型及其封闭构造类型(例如 StringDataDecimalData)时,尝试使用 List<Data> 创建列表会导致编译器错误:“使用泛型类型‘数据’需要 1 个类型参数。” 这是因为 C# 不支持开放泛型类型的菱形运算符;始终需要具体的类型参数。

问题解释

编译器需要知道 Data<T> 类中的特定类型才能创建列表。 List<Data> 是不明确的;它没有指定 T 代表什么类型。

有效的解决方案

以下是解决此问题的两种实用方法:

  1. 接口实现: 创建 IData 及其派生类型实现的接口(例如 Data<T>)。 然后,将您的列表声明为 List<IData>。这利用了多态性,允许您在同一列表中存储不同 Data<T> 类型的实例。

  2. 抽象基类:DataBase 定义一个抽象基类(例如 Data<T>)。 从这个基类派生出您的具体类型。 然后您可以创建 List<DataBase> 列表。 这提供了强类型,但与接口方法相比通用性较差。

注意事项

这两种方法都会引入一定程度的设计复杂性。 选择取决于您的应用程序的具体需求。 接口提供了更大的灵活性,而抽象基类提供了更结构化的方法。

延伸阅读

要更深入地了解 C# 中的泛型、方差和多态性,请参阅以下资源:

以上是为什么 C# 中的通用开放类型列表初始化失败?的详细内容。更多信息请关注PHP中文网其他相关文章!

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