2015-08-08 5 views
19

J'ai lu que toutes les primitives tombent sous l'espace de noms System. Si je commente using System, je m'attendrais à ce qu'il y ait une erreur de construction dans mon programme. Cependant, il fonctionne avec succès. Pourquoi est-ce?Pourquoi les types de données primitifs fonctionnent-ils sans inclure l'espace de noms System?

Attached the snap of my sample program.

+4

_Even_ si vous supprimez tous les espaces de noms, il sera travail :) Juste un indice, si vous dites 'Int32' au lieu de' int', cela ne fonctionnera pas. –

+7

'int' est un * alias * pour' System.Int32' (que vous ne seriez pas capable d'utiliser) –

+1

@ AlexK.Je suis capable d'utiliser int même si je commente en utilisant System; –

Répondre

23

C'est parce que int est un alias pour System.Int32, et depuis le « Int32 » est déjà préfixé avec son espace de noms (par exemple. « Qualifié »), la syntaxe est légale sans avoir à spécifier using System; au haut de votre code.

L'extrait MSDN décrit cette application concept-

La plupart C# commencent par une section de l'utilisation des directives. Cette section répertorie les espaces de noms que l'application utilisera fréquemment, et évite au programmeur de spécifier un nom qualifié complet chaque fois qu'une méthode contenue dans est utilisée. Pour exemple, en incluant la ligne:

using System; 

Au début d'un programme, le programmeur peut utiliser le code:

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

Au lieu de:

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

System.Int32 (aka "int") serait le dernier. Voici un exemple dans le 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" 
     } 
    } 
} 

Depuis la ligne 11 n'est pas qualifié/aliasing un type complet, using System; aurait besoin d'être décommentées pour l'erreur d'aller loin.

D'autres mentions-

+1

Soit le gamma de mon moniteur est éteint ou votre vision est celle d'une abeille;) (schéma de couleurs) – MickyD

+1

Oui .. Je code habituellement sur un fond noir. Juste changé les couleurs en blanc, cela devrait être un peu mieux. – iliketocode

+0

Hehe c'est mieux. J'utilise le schéma sombre aussi, il était juste _dark blue_ fait des trucs fous à mes yeux;) – MickyD

8

Comme était mentionné avant int est un alias de type System.Int32. L'alias des types primitifs est implicitement connu par le langage C#. Voici la liste:

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 

Ainsi, pour ces alias, également connu sous le nom types simples, vous n'avez pas besoin de spécifier un espace de noms.

+0

En d'autres termes, "magic compilateur". ++ le plus sur le sujet répond sur ce Q. – RubberDuck

4

Lorsque vous utilisez int, vous mettez fondamentalement System.Int32.Étant donné que c'est le nom complet du type, vous ne fait pas besoin using System;

Votre programme fonctionnerait si vous avez

System.Int32 num = 0; 

même sans using

+0

Non cela va augmenter l'erreur de compilation si nous n'utilisons pas le système using; –

+5

@RajeshPawde non ce ne sera pas. 'System.Int32' est entièrement qualifié et n'a pas besoin de' using System; ' –

+0

Mon erreur ci-dessus va fonctionner. –