c# - 泛型开放和封闭构造类型

标签 c# generics

最近我注意到泛型构造类型可以是开放的和封闭的。但我不明白他们的实际意思。能举个简单的例子吗?

最佳答案

实际上术语并不重要 - 我不记得上次我不得不担心它是什么时候除了试图写它。

  • 未绑定(bind) 类型没有指定类型参数
  • 一个构造类型至少指定了一个类型参数
  • 类型参数是一个开放类型
  • 元素类型为开放式的数组类型是开放式
  • 一个开放构造类型至少有一个类型参数是开放类型
  • 封闭类型是任何不开放的类型

(嵌套类型还有更多规则。请参阅 C# 3.0 规范第 4.4 节以获取详细信息。)

作为开放构造类型的示例,请考虑:

public class NameDictionary<T> : Dictionary<string, T>

typeof(NameDictionary<>) 的基类是:

  • 构造是因为它指定了类型参数
  • 打开,因为第二个类型参数(T)是一个打开类型

Type.IsGenericType 的 MSDN 文档有一张非常有用的小 table 。

重申一下,这在日常使用中几乎完全不重要。

我通常赞成了解正确的术语——尤其是“按引用传递”等术语——但在这种情况下,它真的、真的不会经常出现。我想积极地劝阻你不要担心 :)

关于c# - 泛型开放和封闭构造类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1735035/

相关文章:

java - 如何创建新的 AnyType[] 数组?

c# - 您在 .NET 中使用代码生成做什么?

c# - 从任何站点下载图像和 pdf 文件

c# - 有什么办法可以使扩展方法优先于泛型方法吗?

java - 泛型类型参数有界,不传递真实类型

c# - 显式转换与在泛型方法中使用 'as'

c# - 使用 C# 驱动程序在 MongoDB 中搜索对象数组

c# - Window 中的 ViewModel 和 UserControl 中的 ViewModel 之间的 WPF 数据绑定(bind)

c# - 设置高度/宽度时,iTextSharp datamatrix 条形码返回 null

java - 如何使用泛型向 ArrayList 添加内容?