为什么C#中的内置类型是语言关键字?

And*_*kin 12 c# language-design keyword

在C#中,标识符例如intstring实际上是语言级关键字.
这是什么原因?

请注意,如果作者想要禁止具有这些名称的用户类型,则可能会产生语义错误,而不是语法错误.

基于答案的一些澄清:

  1. 它们是关键字,因为它使解析成为可能/更容易
    我不明白为什么,因为我正在开发一个解析器,并且Type.Rule = Identifier比它简单得多Type.Rule = Identifier | "int" | "string" | ....

  2. 它们是关键字,因为它们是特殊的别名
    var,dynamic也是特殊的东西,但不是关键字(出于兼容性原因,它表明作为关键字不必是特殊的).在另一个示例中,应用于[Serializable]类型会生成魔法IL元数据修饰符serializable而不是标准自定义属性.但它仍然不是关键字.

  3. 它们是关键词,因为它们是其他语言的关键词
    很好的答案,但是,为什么它们是其他语言的关键词?此外,当然可以用蓝色突出显示它们而不是关键字,那么为什么要从其他语言中引入它?

Roy*_* T. 1

这是因为intC# 语言中内置的其他特殊值类型根本不是真正的类型,而是.NET Framework 系统类型的别名

这是语法错误而不是语义错误的原因很简单,因为这些错误是在语法错误检测阶段检测到的,该阶段发生在语义错误之前。int语法错误检测具有确定是否用作类型或其他内容所需的所有信息。假设我们有以下规则:

declaration = type identifier ;

语法阶段检查标识符是否为 [aZ]([aZ]+ | [0-9]+)+ 并且不是保留关键字或别名,在您描述的情况下是。因此,将其命名为语法错误是完全有道理的。

  • 我认为这并不能真正回答问题。在许多其他语言中,内置类型“也”是关键字,但它们不是 .NET 系统类型的别名。对于第二部分,您实际上只是重申了问题:“这是一个语法错误,因为它是在语法错误检测阶段检测到的”。没有解释*为什么*它是这样设计的。:) (2认同)