Why do primitive data types work without including the System namespace?

I read that all primitives fall under the System namespace. If I comment out using System , I would expect there to be a build error in my program. However, it is running successfully. Why is this?

附上了我的示例程序。


It's because int is an alias for System.Int32 , and since the "Int32" is already prefixed with its namespace (ie. "fully qualified"), the syntax is legal without having to specify using System; at the top of your code.

The MSDN snippet below describes this concept-

Most C# applications begin with a section of using directives. This section lists the namespaces that the application will be using frequently, and saves the programmer from specifying a fully qualified name every time that a method that is contained within is used. For example, by including the line:

using System;

At the start of a program, the programmer can use the code:

Console.WriteLine("Hello, World!");

Instead of:

System.Console.WriteLine("Hello, World!");

System.Int32 (aka "int") would be the latter. Here is an example of this in code -

//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"
        }
    }
}

Since line 11 is not fully qualified / aliasing a fully qualified type, using System; would need to be uncommented for the error to go away.

Additional references-

  • C#, int or Int32? Should I care?

  • Built-In Types Table (C# Reference) (Lists all the built-in types, and their .NET framework equivalents)


  • As was mention before int is an alias of System.Int32 type. The alias of primitive types are implicitly known by the C# language. Here is the list:

    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
    

    So, for these aliases, also known as simple types, you don't need to specify any namespace.


    When you use int, you are basically putting in System.Int32. Since this is the fully qualified type name, you don't actually need using System;

    Your program would work if you did

     System.Int32 num = 0;
    

    even without the using

    链接地址: http://www.djcxy.com/p/21060.html

    上一篇: LINQ to SQL Designer错误

    下一篇: 为什么基元数据类型在不包含System命名空间的情况下工作?