C#为什么代码编译时不包含任何名称空间

Jak*_*ake 2 c#

我尝试了以下内容

// no using statements here, not even using System;

class Program
{
    static void Main(string[] args)
    {
        string[] arr = new string[3] { "A" , "B", "C" };
    }             
}
Run Code Online (Sandbox Code Playgroud)

我的问题很简单,即使没有任何使用语句,编译器如何能够编译它,更具体地说,不应该有编译时错误,因为我正在尝试构建一个数组并且System.Array不可访问?

谢谢.

Eri*_*ert 32

你似乎对什么using意思有误解.一个using指令是用于确定哪些简单的姓名与您在编译时的程序手段.当你说using Foo;这意味着"如果这个程序的文本使用简单名称Bar,并且似乎没有任何Bar名称在使用该名称的范围内,那么请尝试检查是否存在Bar名称空间内部的类型Foo".

您的程序不包含任何简单的名称!(string不是简单的名称;它是该语言的关键字.)因此,不需要任何using指令来解析不存在的简单名称.

using并不意味着"此程序使用需要在此程序集中找到类型的功能",这是您认为它的含义. using指令仅涉及(1)简单的名称解析,以及(2)扩展方法名称解析.


jas*_*son 14

数组是语言的一部分.您无需引用命名空间即可使用它们.


Mrc*_*ief 6

string[]System.Array在编译时转换为.由于它已经完全合格,因此不需要任何using陈述.


Fré*_*idi 5

您不是通过名称引用任何命名空间类型,而是您的(Program类).

string并且[]是分别确实等同于System.String和的别名System.Array,但是使用它们不需要将对应的命名空间拉到范围内.