问题
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