2010-10-21 4 views
6

Sur MSDN je peux lire ce qu'il fait, mais je voudrais savoir ce qu'il fait techniquement (dit au compilateur où chercher les types ..)? Je veux dire utiliser comme une directive.Que fait exactement la directive using?

Répondre

8

La fonction principale de la directive using est de rendre les types dans un espace de noms disponibles sans qualification pour le code utilisateur. Il considère l'ensemble des espaces de noms et des types qui sont définis dans les assemblys référencés et le projet en cours de compilation.

Prenez par exemple la définition suivante dans MyTypes.Dll

namespace MyTypes { 
    class Class1 {} 
} 

considèrent maintenant le référencement MyTypes.dll d'un autre projet avec un espace de noms différent. Sans une directive à l'aide pour créer Class1 je dois qualifier le nom

MyTypes.Class1 local1 = new MyTypes.Class1(); 

La directive using me laisse toutefois supprimer cette qualification

using MyTypes; 
... 
Class1 local1 = new Class1(); 
+0

également, si le type n'est pas trouvé dans l'espace de noms de l'application, le compilateur va chercher dans les espaces de noms inclus en utilisant, non? – Loj

+1

@Mojmi pour le cas commun oui. Recherche de nom est en fait assez complexe et je n'ai pas spécifiquement commenté exactement comment cela fonctionne en raison de la forte probabilité que j'obtiendrais les détails amusants faux. – JaredPar

0

using indique au compilateur quels espaces de noms doivent rechercher les noms utilisés dans le fichier mais non définis dans le fichier.

2

@ La réponse de JaredPar est correcte, je voudrais ajouter que ne fonctionne pas tout à fait de la même manière que import en Java. (Quelqu'un me corriger si je me trompe sur Java de import fait l'importer dans la mémoire)

Vous devez inclure soit une DLL ou une référence de projet afin de même être en mesure d'utiliser using mais il est pas chargé en mémoire jusqu'à ce que vous avez réellement appeler dans une méthode/propriété/quelque chose dans l'assemblage. Donc vous pouvez avoir using System.Linq; mais si vous n'utilisez pas de méthodes Linq, l'assemblage Linq n'est jamais chargé. (Je ne suis pas 100% positif que Linq est dans son propre assemblage physique puisque les espaces de noms et les assemblages ne sont pas 1: 1, mais pour l'exemple je suppose qu'il est)

0

en utilisant juste dire au compilateur d'aller dans le fichier de configuration de l'assembly et recherchez une DLL spécifique avec le nom donné, si la DLL est trouvée, elle lie cette DLL dans le projet en cours. l'utilisation est juste une opération de lien pour que les DLL se parlent entre elles dans un espace partagé en mémoire. Le gars ci-dessous est juste

Questions connexes