C# “一词的最佳定义是什么?”;“类型”;特别是c语言?
这可能是一个非常简单的问题,但我对类型的定义感到困惑 当您想提供术语类型的定义时,例如C# “一词的最佳定义是什么?”;“类型”;特别是c语言?,c#,programming-languages,types,definition,C#,Programming Languages,Types,Definition,这可能是一个非常简单的问题,但我对类型的定义感到困惑 当您想提供术语类型的定义时,例如Int、String或我立刻想到了模板这个词,但它与类的定义非常接近,现在我想知道类型的确切定义是什么 是否与类定义相同类型==类 如果是这样,我们知道c中还有其他(参考)类型不是类,例如接口和委托 可以互换使用类型和类吗? 您能给我一个关于类型的全面定义吗 提前感谢。不,交替使用“类型”和“类”是不正确的 类型可以是以下任一类型: 班级 接口 委托类型 枚举类型 结构 指针类型 数组类型(也是类) 就我所
Int、String
或我立刻想到了
模板
这个词,但它与类的定义非常接近,现在我想知道类型的确切定义是什么
是否与类定义相同
<代码>类型==类
如果是这样,我们知道c中还有其他(参考)类型不是类
,例如接口
和委托
可以互换使用类型和类吗?您能给我一个关于类型的全面定义吗
提前感谢。不,交替使用“类型”和“类”是不正确的 类型可以是以下任一类型:
- 班级
- 接口
- 委托类型
- 枚举类型
- 结构
- 指针类型
- 数组类型(也是类)
我怀疑对于大多数开发人员来说,举例说明“类型”一词的含义比准确定义这个词更简单、更具交际性。您不应该交替使用类型和类 是一本关于类型的有趣读物
请注意,类型包括、和构造以及。类和类型是不可交换的。类总是类型,但类型并不总是类。例如,结构和接口是类型,但不是类。这里是 类型是可以实例化的任何东西(我的定义,而不是MSFT)
可以实例化接口,因为必须有另一种类型来实现该接口 匿名类型是没有类定义但可以实例化的类型 任何类型都可以从另一个(非匿名)类型继承。然后我们将另一种类型称为基类型 编辑:正如Jon Skeet所说的,静态类无法实例化,因此我的定义没有任何意义。也许它应该是“任何可以实例化的东西,或者一个静态类”…“类型”只是“数据类型”的缩写。您使用的任何变量都有一些数据类型,可以是所谓的“简单类型”(如
int
或long
),也可以是“复杂类型”,如struct
或类
虽然类始终是类型,但并非所有类型都是类。例如,int
是一个类型,但不是一个类。C#的特点是,对于每个简单类型,都有一个表示类(bool
=>Boolean
)
您不能互换使用class和type,但如果您这样做,您将基本理解:-)我能想到的最好的日常答案是:
类型是值的集合、对这些值的操作的集合以及使其唯一的名称
如果你想从计算机科学的角度寻找一个关于类型基本上是什么的深刻答案,我认为你不会在C#文档中找到它。类型是我们大多数人在日常生活中成功使用的东西,而不必确定它们的确切定义。但是如果你真的想知道的话,我想你会在编程理论和语言社区(特别是ML和Haskell)中找到更好的答案,在那里人们会非常小心地将他们所谈论的内容精确地形式化
是一个很好的起点。正如其他人所指出的,C规范没有正式定义“类型”。C#规范既不试图成为语言语义的正式数学描述,也不试图成为初学者程序员的教程;在开始阅读规范之前,您需要知道“type”和“value”等词的含义
“类型”有许多可能的定义,精确程度各不相同。例如,ECMAScript规范在某种程度上非正式地将类型定义为“一组值”,但由于ECMAScript只有九种可能的类型,因此它不需要有严格的、基础良好的定义
另一个答案是,类型由一组值、一组对这些值进行操作的规则和一个名称组成。这是一个非常常见的类型工作定义,但当您试图更正式地考虑它时,它会遇到问题。匿名类型的名称是什么?double*[][]
类型的名称是“指向double的交错二维指针数组”吗?那种类型有名字吗?同一类型的List
和List
是否有两个不同的名称?是否有任何一组值构成一个类型?类型本身就是值吗?a型的类型是什么?等等这是一个很好的工作定义,但在仔细检查下,它不太成立
作为一名编译器编写者,我对C#中类型的看法如下:类型是可以应用于表达式的分类。如果有证据表明,根据C#的规则,表达式在法律上如何被归类为某一特定类型,则该表达式被归类为该类型
例如,假设我们正在尝试计算表达式“1+2.3”的类型。我们首先计算表达式“1”的类型。C#的规则给了我们这一点;这种形式的表达式总是被归类为int。我们计算出表达式“2.3”的类型。同样,C#的规则告诉我们,这种形式的表达式被归类为“double”。整个表达式的类型是什么?C#的规则告诉我们