为什么原始数据类型在不包含System名称空间的情况下工作

Raj*_*wde 19 .net c# primitive namespaces

我读到所有原语都属于System命名空间.如果我发表评论using System,我希望我的程序中存在构建错误.但是,它正在成功运行.为什么是这样?

附上我的示例程序的快照.

ili*_*ode 23

因为它int是别名System.Int32,并且因为"Int32"已经以其命名空间为前缀(即"完全限定"),所以语法是合法的,无需using System;在代码的顶部指定.

下面的MSDN片段描述了这个概念 -

大多数C#应用程序都以一段using指令开头.本节列出了应用程序将经常使用的命名空间,并保存程序员在每次使用其中包含的方法时指定完全限定的名称.例如,通过包含以下行:

using System;
Run Code Online (Sandbox Code Playgroud)

在程序开始时,程序员可以使用以下代码:

Console.WriteLine("Hello, World!");
Run Code Online (Sandbox Code Playgroud)

代替:

System.Console.WriteLine("Hello, World!");
Run Code Online (Sandbox Code Playgroud)

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"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

由于第11行不是完全限定类型的完全限定/别名,using System;因此需要取消注释才能使错误消失.

其他参考 -


oct*_*ccl 8

如前所述,intSystem.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
Run Code Online (Sandbox Code Playgroud)

因此,对于这些别名(也称为简单类型),您不需要指定任何名称空间.