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?
risposta
È 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-
Built-In Types Table (C# Reference) (Elenca tutti i tipi built-in, e loro equivalenti framework .NET)
La gamma del mio monitor è esaurita o la tua visione è quella di un'ape;) (combinazione di colori) – MickyD
Sì. Io di solito codifico su uno sfondo nero. Basta cambiare i colori in bianco, questo dovrebbe essere un po 'meglio. – iliketocode
Hehe è meglio. Uso lo schema dark anche se era solo _dark blue_ fa cose pazzesche ai miei occhi;) – MickyD
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.
In altre parole, "magia del compilatore". ++ la risposta più soggetta a questo argomento su questo Q. – RubberDuck
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
No questo solleverà l'errore di compilazione se non stiamo usando il Sistema usando; –
@RajeshPawde no non lo farà. 'System.Int32' è completamente qualificato e non necessita di' using System; ' –
Il mio errore sopra funzionerà. –
_Even_ se si elimina tutti gli spazi dei nomi, lo farà lavoro :) Solo un suggerimento, se dici 'Int32' invece di' int', non funzionerà. –
'int' è un * alias * per' System.Int32' (che non saresti in grado di utilizzare) –
@ AlexK.Posso usare int anche se commento usando System; –