在 C# 中,如果注释“使用系统”,关键字从何而来

本文关键字:关键字 使用系统 系统 如果 注释 | 更新日期: 2023-09-27 18:31:20

例如,我们知道C#中的"int"类型只不过是一个结构,实际上是System.Int32。如果是这样,那么如果在程序中注释了"using system;",那么int类型应该不能使用。但仍然可以使用 int 类型。我的问题是,这些类型来自哪里?

//using System;
class Program
{
    static void Main() {
         int x = 0;  // it still work, though int is under System namespace, why??
    }
}

在 C# 中,如果注释“使用系统”,关键字从何而来

类型别名如intstringobject等都内置于语言中,不需要using指令即可使用,这与DateTime不同。

但是,如果它可以帮助您考虑它,您可以考虑intglobal::System.Int32的缩写。

class Program
{
    static void Main() {
         int x = 0;
    }
}

翻译为

class Program
{
    static void Main() {
         global::System.Int32 x = 0;
    }
}

事实上,由于类型别名是关键字,您甚至无法像预期的那样重新定义它们:

public class int { } // Compiler error: Identifier expected; 'int' is a keyword

如果出于某种原因想要执行此操作,则必须像这样转义标识符:

public class @int { }
int x = 0;             // equivalent to global::System.Int32
@int y = new @int();   // equivalent to global::MyNamespace.@int