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
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();
using
informiert den Compiler, welche Namespaces nach Namen in der Datei suchen, die in der Datei nicht definiert sind.
@ 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)
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
auch, wenn der Typ nicht innerhalb des App-Namespace gefunden wird, wird der Compiler Namespaces durchsuchen, die durch Verwendung enthalten sind, richtig? – Loj
@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