Wo oder wann würde man Namespace-Aliasing wie verwenden
using someOtherName = System.Timers.Timer;
Es scheint mir, dass es dem Verständnis der Sprache nur mehr Verwirrung bringen würde.
c#
namespaces
Brad
quelle
quelle
using int = System.Int32
C #? Nützlich, nicht wahr? Es ist die gleiche Verwendung, die anderswo genutzt werden kann.using int = System.Int32
und an anderen Stellen als in der deklarierenden Datei verwenden. So diesint
zuInt32
alias kann entweder durch andere Mittel erreicht werden, oder ist eine besondere Sache im Compiler / runtime.using int = System.Int32
ist sowohl falsch als auch irreführend - es ist falsch, weil derint
Alias nicht so implementiert ist, wie Sie es beschrieben haben. Es ist irreführend, weil Sie implizieren, dass Typ-Aliase global verwendet werden können, genau wieint
bei der VerwendungInt32
.Antworten:
Dies ist ein Typalias, kein Namespace-Alias. Es ist nützlich, zu unterscheiden - zum Beispiel gegen:
(ps: danke für die Wahl von
Timer
;-p)Andernfalls müssen Sie, wenn Sie beide
System.Windows.Forms.Timer
undSystem.Timers.Timer
dieselbe Datei verwenden, weiterhin die vollständigen Namen angeben (daTimer
dies verwirrend sein kann).Es spielt auch eine Rolle bei
extern
Aliasen für die Verwendung von Typen mit demselben vollqualifizierten Typnamen aus verschiedenen Assemblys - selten, aber nützlich, um unterstützt zu werden.Eigentlich kann ich eine andere Verwendung sehen: Wenn Sie schnell auf einen Typ zugreifen möchten, aber keine reguläre verwenden möchten,
using
weil Sie einige widersprüchliche Erweiterungsmethoden nicht importieren können ... etwas kompliziert, aber ... hier ist ein Beispiel ...quelle
System.Timers.Timer
;-pIch benutze es, wenn ich mehrere Namespaces mit widersprüchlichen Sub-Namespaces und / oder Objektnamen habe. Sie könnten einfach so etwas wie [als Beispiel] tun:
Was sonst geschrieben werden müsste:
Es spart eine Menge Tipparbeit und kann verwendet werden, um das Lesen von Code zu vereinfachen.
quelle
Zusätzlich zu den genannten Beispielen können Typ-Aliase (anstelle von Namespace-Aliasen) nützlich sein, wenn wiederholt auf generische Typen verwiesen wird:
Gegen:
quelle
Kürze.
Es gibt Nebeneffekte, um Klarheit zwischen Namespaces zu schaffen, die Typnamen gemeinsam haben, aber im Grunde ist es nur Zucker.
quelle
Ich benutze es immer in solchen Situationen
wo
Utility
sonst hätte ein anderer Kontext (wieMyBaseNamespace.MySubNamespace.MySubSubNamespace.Utility
), aber ich erwarte / bevorzugeUtility
immer auf diese eine bestimmte Klasse zu verweisen.quelle
Dies ist sehr nützlich, wenn Sie mehrere Klassen mit demselben Namen in mehreren enthaltenen Namespaces haben. Beispielsweise...
Sie können Aliase verwenden, um den Compiler glücklich zu machen und die Dinge für Sie und andere in Ihrem Team klarer zu machen:
quelle
Wir haben Namespace-Aliase für alle unsere Namespaces definiert. Dies macht es sehr einfach zu erkennen, woher eine Klasse kommt, z.
und
Wir haben einige Richtlinien definiert, wie die Aliase benannt werden müssen und jeder sie verwendet.
quelle
Ich finde die Aliase sehr nützlich beim Testen von Einheiten. Wenn Sie Komponententests schreiben, ist es üblich, das zu testende Subjekt als zu deklarieren
wobei
myClassUT
das Thema U nder T est. Aber was , wenn Sie für eine statische Klasse mit statischen Methoden zu schreiben Unit - Tests wollen? Dann können Sie einen Alias wie folgt erstellen:Dann können Sie Ihre Unit-Tests folgendermaßen schreiben:
und Sie verlieren nie aus den Augen, was das zu testende Thema ist.
quelle
In gewisser Weise ist es sehr praktisch beim Codieren in Visual Studio.
Anwendungsfall : Angenommen, ich muss nur wenige Klassen verwenden, z . B.
SqlConnection
aus einem NamespaceSystem.Data
. Normalerweise importiere ich denSystem.Data.SqlClient
Namespace oben in der * .cs-Datei wie folgt:Nun sieh dir meine Intelligenz an. Es gibt viele Klassen, aus denen Sie beim Eingeben im Code-Editor auswählen können. Ich werde überhaupt keine ganzen Klassen benutzen:
Daher würde ich lieber einen Alias oben in meiner * .cs-Datei verwenden und eine klare Intellisense-Ansicht erhalten:
Schauen Sie sich jetzt meine Intellisense-Ansicht an. Es ist super klar und super sauber.
quelle
Ein Grund, den ich kenne; Sie können kürzere Namen verwenden, wenn Sie Namenskollisionen von importierten Namespaces haben. Beispiel:
Wenn Sie beim Zugriff deklariert haben
using System.Windows.Forms;
und sichusing System.Windows.Input;
in derselben DateiModifierKeys
befinden, stellen Sie möglicherweise fest, dass sich der NameModifierKeys
sowohl imSystem.Windows.Forms.Control
als auch imSystem.Windows.Input
Namespace befindet. Wennusing Input = System.Windows.Input;
Sie also deklarieren , können SieSystem.Windows.Input.ModifierKeys
überInput.ModifierKeys
.Ich bin kein C # -Fan, aber Aliasing-Namespace scheint mir "Best Practice" zu sein. Auf diese Weise wissen Sie, was Sie bekommen und müssen immer noch nicht zu viel tippen.
quelle
Sie können sie verwenden, um einen Code sehr einfach zu ändern.
Beispielsweise:
Durch die einfache Änderung der Direktive können Sie entscheiden, ob Ihr gesamter Code in
float
oder funktioniertdouble
.quelle