C#为什么代码编译时不包含任何空格
我尝试了以下方法C#为什么代码编译时不包含任何空格,c#,C#,我尝试了以下方法 // no using statements here, not even using System; class Program { static void Main(string[] args) { string[] arr = new string[3] { "A" , "B", "C" }; } } 我的问题很简单,即使没有任何USE语句,为什么编译器能够编译这个,更具体地说,不应该有编译时错误,因为
// no using statements here, not even using System;
class Program
{
static void Main(string[] args)
{
string[] arr = new string[3] { "A" , "B", "C" };
}
}
我的问题很简单,即使没有任何USE语句,为什么编译器能够编译这个,更具体地说,不应该有编译时错误,因为我试图构建一个数组和系统。数组是不可访问的
谢谢。您没有直接引用
数组
类或其成员,因此编译器不会抱怨您试图引用未使用的命名空间或类型。您只是使用C语言本身的一部分表示法来生成数组。数组是该语言的一部分。使用它们不需要引用命名空间。string[]
将在编译时转换为System.Array
。因为它已经完全限定,所以不需要任何使用语句。这是因为您使用的是核心内容,您甚至不需要系统来编译它。系统
命名空间具有扩展功能,系统命名空间中包含的一些类是:
- 行动
- Func
- 控制台
由于您不想在命令提示符下写入内容,也不想使用DateTime
创建操作,甚至不想请求日期,因此不需要导入任何内容。您不需要按名称引用任何名称空间的类型,而是指您的类型(程序
类)
string
和[]
是别名,它们实际上分别相当于System.string
和System.Array
,但使用它们并不需要将它们对应的名称空间拉入范围。使用语句不包含任何内容或提供任何ekstra代码。这只会使编码更加简单,因为您不必每次都编写整个路径
string
自动转换为System.string
你可以这样写:
class Foo {
string Bar() {
return System.IO.File.Exists("path").ToString();
}
}
或者只是
using System.IO;
class Foo {
string Bar() {
return File.Exists("path").ToString();
}
}
这两个程序都编译到同一个程序。名称空间不是必需的,您可以使用名称空间组织代码,但不必这样做。
和通用关键字会自动引用到适当的命名空间
为了更好地理解此msdna文档,您似乎对使用
的含义有误解。using
指令用于在编译时确定简单名称在程序中的含义。当你用Foo说
这意味着“如果此程序的文本使用简单的名称Bar
,并且名称Bar
似乎不在使用该名称的范围内,那么请尝试检查命名空间Foo
中是否有名为Bar
的类型。”
您的程序不包含任何简单名称!(string
不是一个简单的名称;它是该语言的一个关键字。)因此,不需要使用任何指令来解析不存在的简单名称
使用
一点也不意味着“此程序使用需要在此程序集中找到类型的功能”,这就是您认为它的意思<代码>使用
指令只涉及(1)简单名称解析和(2)扩展方法名称解析。我认为这不是问题所在。System.String如何访问?我将鼠标悬停在语句中的字符串[]部分上,它显示“class System.string”@Amit:string
是一个关键字,而like[]
是语言的一部分,所以原因相同。@Amit,它是语言的一部分,这是一个核心功能。他在问为什么代码编译时不使用字符串,即使他正在生成一个字符串数组。如果你使用String
而不是String
,你会得到你期望的错误。@Henk Holterman:他会得到一个错误,但我认为这不是他期望的错误。