为什么基元数据类型在不包含System命名空间的情况下工作?
我读过所有的原语属于System
命名空间。 如果我using System
注释掉,我期望在我的程序中出现构建错误。 但是,它正在成功运行。 为什么是这样?
这是因为int
是System.Int32
的别名,并且由于“Int32”已经以其名称空间作为前缀(即“完全限定”),所以该语法是合法的,而不必指定using System;
在代码的顶部。
下面的MSDN代码片段描述了这个概念 -
大多数C#应用程序都以一段使用指令开始。 本节列出应用程序将频繁使用的名称空间,并且每次使用包含的方法时,程序员都不用指定完全限定的名称。 例如,通过包含该行:
using System;
在程序开始时,程序员可以使用代码:
Console.WriteLine("Hello, World!");
代替:
System.Console.WriteLine("Hello, World!");
System.Int32
(又名“int”)将是后者。 这是代码中的一个例子 -
//using System;
namespace Ns
{
public class Program
{
static void Main(string[] args)
{
System.Int32 i = 2; //OK, since we explicitly specify the System namespace
int j = 2; //alias for System.Int32, so this is OK too
Int32 k = 2; //Error, because we commented out "using System"
}
}
}
由于第11行没有完全限定/ using System;
取消完全限定类型, 将需要注意错误消失。
其他参考 -
C#,int或Int32? 我应该在乎吗?
内置类型表(C#参考)(列出所有内置类型及其.NET Framework等价物)
如前所述, int
是System.Int32
类型的别名。 C#语言隐式地知道原始类型的别名。 列表如下:
object: System.Object
string: System.String
bool: System.Boolean
byte: System.Byte
sbyte: System.SByte
short: System.Int16
ushort: System.UInt16
int: System.Int32
uint: System.UInt32
long: System.Int64
ulong: System.UInt64
float: System.Single
double: System.Double
decimal: System.Decimal
char: System.Char
因此,对于这些别名(也称为简单类型),您不需要指定任何名称空间。
当你使用int时,你基本上会放入System.Int32。 由于这是完全限定的类型名称,因此实际上并不需要using System;
如果你这样做了,你的程序就可以运行
System.Int32 num = 0;
即使没有using
上一篇: Why do primitive data types work without including the System namespace?