2010-10-21 8 views
6

Auf MSDN kann ich lesen, was es tut, aber ich würde gerne wissen, was es technisch macht (sagt Compiler, wo nach Typen suchen ..)? Ich meine, als Richtlinie zu verwenden.Was genau macht die using-Direktive?

Antwort

8

Die primäre Funktion der using-Direktive besteht darin, Typen innerhalb eines Namespaces ohne Einschränkung für den Benutzercode verfügbar zu machen. Es berücksichtigt die Menge von Namespaces und Typen, die in referenzierten Assemblys und dem zu kompilierenden Projekt definiert sind.

Nehmen Sie zum Beispiel die folgende Definition in MyTypes.Dll

namespace MyTypes { 
    class Class1 {} 
} 

Betrachten wir nun MyTypes.dll aus einem anderen Projekt mit einem anderen Namespace verweist. Ohne eine Richtlinie mit Class1 erstellen muß ich den Namen qualifizieren

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

Die using Richtlinie ich entferne diese Qualifikation läßt

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

auch, wenn der Typ nicht innerhalb des App-Namespace gefunden wird, wird der Compiler Namespaces durchsuchen, die durch Verwendung enthalten sind, richtig? – Loj

+1

@Mojmi für den gemeinsamen Fall ja. Das Nachschlagen von Namen ist eigentlich ziemlich komplex und ich habe mich nicht genau dazu geäußert, wie es funktioniert, aufgrund der hohen Wahrscheinlichkeit, dass ich die spaßigen Details falsch verstehen würde. – JaredPar

0

using informiert den Compiler, welche Namespaces nach Namen in der Datei suchen, die in der Datei nicht definiert sind.

2

@ JaredPar Antwort richtig ist, aber Ich mag würde, dass es hinzufügen funktioniert nicht ganz so wie zB import in Java. (jemand korrigiert mich, wenn ich falsch bin über Java import tatsächlich importieren es in den Speicher)

Sie müssen entweder eine DLL oder Projekt-Referenz enthalten, um sogar using zu verwenden, aber es ist nicht in den Speicher geladen, bis Sie tatsächlich Rufen Sie eine Methode/Eigenschaft/etwas in der Assembly auf. Sie könnten also using System.Linq; haben, aber wenn Sie keine Linq-Methoden verwenden, wird die Linq-Assembly nie geladen. (Ich bin nicht 100% positiv, dass Linq in seiner eigenen physischen Assembly ist, da Namespaces und Assemblies nicht 1: 1 sind, aber aus Gründen des Beispiels nehme ich an)

0

Verwenden Sie nur den Compiler zu gehen In der Konfigurationsdatei der Assembly suchen Sie nach einer bestimmten DLL mit dem angegebenen Namen. Wenn die DLL gefunden wird, wird diese DLL mit dem aktuellen Projekt verknüpft. Verwenden ist nur eine Verknüpfungsoperation, um DLL in einem gemeinsam genutzten Speicherbereich miteinander kommunizieren zu lassen. Der Typ unter hier ist richtig