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

…衆ロ難τιáo~ 提交于 2021-02-07 11:17:01

问题


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?


回答1:


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)




回答2:


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.




回答3:


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



来源:https://stackoverflow.com/questions/31894032/why-do-primitive-data-types-work-without-including-the-system-namespace

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!