2017-04-26 113 views
1

从C#5.0规格构造类型,有界类型和无界类型的含义?

4.4构造类型

一个通用类型声明,其本身表示绑定的泛型 类型被用作一个“蓝图”,以形成许多不同类型的,通过 应用类型参数的方式。类型参数写在 通用类型的名称后面的尖括号(<和>)中。未绑定的泛型只能在 typeof-表达式(第7.6.11节)中使用。包含至少一个类型 自变量的类型称为构造类型。一种构造类型可以是 ,用于大多数语言中可以显示类型名称的地方。 未绑定的泛型类型只能在typeof-表达式 (第7.6.11节)中使用。
构造类型也可以在表达式中用作简单名称(第7.6.2节)或访问成员(第7.6.4节)时使用。

“构造类型”的概念是否与“有界泛型”的概念相同?

4.4.3结合和未结合类型

术语未绑定类型指非通用型或未绑定 通用类型。术语绑定类型是指非泛型类型或 构造类型。

未绑定类型指的是由 类型声明声明的实体。 未绑定的泛型类型本身不是一种类型,并且 不能用作变量类型,参数或返回值,或者 作为基类型。唯一可以引用非绑定泛型 的构造是类型表达式(第7.6.11节)。

是非泛型类型都是未绑定和绑定类型吗?

+0

Jon Skeet在这里的一个很好的(相关的)总结http://stackoverflow.com/a/1735060/1663001 – DavidG

回答

5

“构造类型”的概念与“有界泛型”的概念是否相同?

是的,取消您的排字错误。你的意思是说“绑定泛型类型”,而不是“有界泛型类型”。

是非泛型类型都是未绑定和绑定类型吗?

是的。

为什么这些术语如此多余/重复/卷积?

这些术语是为了方便规范作者和编译器团队而发明的。您确定的唯一冗余是构造的等于约束通用,这对我来说似乎很合理。我没有看到任何重复或卷积。

如果这些术语看起来很复杂,那么我向你提出现代业务线OO语言的类型理论是一个复杂的主题;它的行话反映了这种复杂性。

这可能有助于思考这种方式。假设我们有一个C类的是采用n型参数,对于n> = 0:

  • 概念C-该通吃n型参数未结合类型。
  • 概念C与n型参数是一个绑定类型。
  • 一个约束泛型类型必须是一个泛型类型已经类型参数构造,所以我们称之为构造类型

显然,如果n == 0,那么C同时是绑定和非绑定类型。

+0

谢谢。为什么这些术语如此冗长/重复/令人费解? – Tim