2015-08-08 79 views
19

Przeczytałem, że wszystkie prymitywy wchodzą w przestrzeń nazw System. Jeśli skomentuję numer using System, spodziewałbym się, że w moim programie wystąpi błąd kompilacji. Jednak działa z powodzeniem. Dlaczego to?Dlaczego prymitywne typy danych działają bez uwzględniania przestrzeni nazw System?

Attached the snap of my sample program.

+4

_Even_ jeśli usunąć wszystkie obszary nazw, to będzie praca :) Po prostu podpowiedź, jeśli powiesz 'Int32' zamiast' int', to nie zadziała. –

+7

'int' to * alias * dla' System.Int32' (którego nie możesz używać) –

+1

@ AlexK. Jestem w stanie używać int, mimo że komentuję używając System; –

Odpowiedz

23

To dlatego int jest aliasem dla System.Int32, a od „Int32” już jest poprzedzona jego nazw (tzn. „W pełni wykwalifikowanym”), składnia jest legalny, bez konieczności określania using System; u do góry twojego kodu.

MSDN fragment poniżej opisuje ten Concept-

Większość C# aplikacji rozpocząć o przekroju za pomocą dyrektyw. Ta sekcja zawiera listę obszarów nazw, które aplikacja będzie często używać, i zapisuje programistę od podania w pełni kwalifikowanej nazwy za każdym razem, gdy używana jest metoda zawarta w tym dokumencie. Dla przykład, w tym linię:

using System; 

na początku programu, programista może użyć kodu:

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

Zamiast:

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

System.Int32 (alias "int") byłby drugim. Oto przykład tego w kodzie -

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

Ponieważ linia 11 nie jest w pełni wykwalifikowany/aliasing w pełni kwalifikowanego typu, using System; musiałyby być komentarzem do błędu odejść.

Dodatkowe references-

+1

Albo gama mojego monitora jest wyłączona, albo twoja wizja jest podobna do pszczoły;) (schemat kolorów) – MickyD

+1

Tak. Zazwyczaj koduję na czarnym tle. Po prostu zmieniłem kolor na biały, to powinno być trochę lepsze. – iliketocode

+0

Hehe to jest lepsze. Używam także mrocznego schematu, to było po prostu _dark blue_ robi szalone rzeczy w moich oczach;) – MickyD

8

As był wcześniej wspomniany int to alias typu System.Int32. Alias ​​prymitywnych typów jest domyślnie znany jako język C#. Oto lista:

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 

Tak, dla tych aliasów, znany również jako typów prostych, nie trzeba określać żadnych nazw.

+0

Innymi słowy, "magia kompilatora". ++ najwięcej odpowiedzi na temat tego pytania. – RubberDuck

4

Kiedy używasz int, zasadniczo wprowadzasz System.Int32.Ponieważ jest to w pełni kwalifikowana nazwa typu, w rzeczywistości nie potrzebują using System;

Twój program będzie działać, jeśli nie

System.Int32 num = 0; 

nawet bez using

+0

Nie spowoduje to błędu kompilacji, jeśli nie używamy systemu; –

+5

@RajeshPawde nie, nie będzie. 'System.Int32' jest w pełni kwalifikowany i nie potrzebuje' using System; ' –

+0

Mój błąd powyżej będzie działał. –