构造类型,有界类型和无界类型的含义?

时间:2017-04-26 23:40:02

标签: c# visual-studio

来自C#5.0规范

  

4.4构造类型

     

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

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

  

4.4.3绑定和未绑定类型

     

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

     

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

非泛型类型是非绑定类型还是绑定类型?

1 个答案:

答案 0 :(得分:5)

  

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

是的,以你的错字为模。你的意思是说“绑定泛型类型”,而不是“有界泛型类型”。

  

非泛型类型是非绑定类型还是绑定类型?

  

为什么这些术语如此冗余/重复/错综复杂?

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

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

以这种方式思考它可能会有所帮助。假设我们有一个带有n个参数的C类,对于n> = 0:

  • 概念 C-that-n-type-arguments 未绑定类型。
  • 概念 C-with-n-type-arguments 绑定类型。
  • 绑定泛型类型必须是使用类型参数构造的的泛型类型,因此我们将其称为构造类型。 / LI>

显然,如果n == 0,则C同时是绑定类型和未绑定类型。