2015-08-08 12 views
19

Ho letto che tutte le primitive rientrano nello spazio dei nomi System. Se commento fuori using System, mi aspetterei che ci fosse un errore di compilazione nel mio programma. Tuttavia, sta funzionando con successo. Perchè è questo?Perché i tipi di dati primitivi funzionano senza includere lo spazio dei nomi di sistema?

Attached the snap of my sample program.

+4

_Even_ se si elimina tutti gli spazi dei nomi, lo farà lavoro :) Solo un suggerimento, se dici 'Int32' invece di' int', non funzionerà. –

+7

'int' è un * alias * per' System.Int32' (che non saresti in grado di utilizzare) –

+1

@ AlexK.Posso usare int anche se commento usando System; –

risposta

23

È perché int è un alias per System.Int32, e poiché il "Int32" è già prefisso con il suo spazio dei nomi (es. "Pienamente qualificato"), la sintassi è legale senza dover specificare using System; al parte superiore del codice.

Il MSDN frammento seguente descrive questa concept-

maggior C# applicazioni iniziano con una sezione di direttive using. Questa sezione elenca gli spazi dei nomi che l'applicazione utilizzerà con frequenza e salva il programmatore specificando un nome completo ogni volta che viene utilizzato un metodo contenuto all'interno. Ad esempio, includendo la linea:

using System; 

All'inizio di un programma, il programmatore può utilizzare il codice:

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

Invece di:

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

System.Int32 (aka "int") sarebbe il secondo. Ecco un esempio di questo nel codice -

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

Poiché la linea 11 non è pienamente qualificato/aliasing un tipo completo, using System; sarebbe bisogno di essere commentata per l'errore di andare via.

Ulteriori references-

+1

La gamma del mio monitor è esaurita o la tua visione è quella di un'ape;) (combinazione di colori) – MickyD

+1

Sì. Io di solito codifico su uno sfondo nero. Basta cambiare i colori in bianco, questo dovrebbe essere un po 'meglio. – iliketocode

+0

Hehe è meglio. Uso lo schema dark anche se era solo _dark blue_ fa cose pazzesche ai miei occhi;) – MickyD

8

As è stato menzionato prima int è un alias di tipo System.Int32. Gli alias dei tipi primitivi sono implicitamente noti con il linguaggio C#. Ecco l'elenco:

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 

Quindi, per questi alias, noti anche come tipi semplici, non c'è bisogno di specificare alcun namespace.

+0

In altre parole, "magia del compilatore". ++ la risposta più soggetta a questo argomento su questo Q. – RubberDuck

4

Quando si utilizza int, in pratica si inserisce System.Int32.Dal momento che questo è il nome di tipo completo, in realtà non c'è bisogno using System;

Il vostro programma potrebbe funzionare se l'avete fatto

System.Int32 num = 0; 

anche senza l'using

+0

No questo solleverà l'errore di compilazione se non stiamo usando il Sistema usando; –

+5

@RajeshPawde no non lo farà. 'System.Int32' è completamente qualificato e non necessita di' using System; ' –

+0

Il mio errore sopra funzionerà. –