C # -Namespace-Alias - Worum geht es?
Habe ich versucht zu lernen, mehr über die Sprache C#, aber ich habe nicht in der Lage, um zu sehen, eine situation, wo würde man mit namespace-aliasing wie
using someOtherName = System.Timers.Timer;
Scheint es mir, dass es einfach mehr Verwirrung zu Verständnis der Sprache.
Könnte jemand bitte erklären.
Dank
Kommentar zu dem Problem
Wie wäre es mit einem system-wide
int = System.Int32
in C#? Nützlich, nicht wahr? Es ist die gleiche verwenden, die in Anspruch genommen werden kann anderswo. @nawfal ich glaube, dass Typ-Aliase sind nicht exportierbar. Heißt, Sie kann nicht definieren, so etwas wie
int = System.Int32
, und verwenden Sie es in anderen Orten als mit der Erklärung-Datei. Also das int
zu Int32
alias kann entweder erreicht werden durch andere Mittel, oder ist eine spezielle Sache, die in der compiler/runtime. @KFL, das ist wahr, aber die profitieren beide von der gleichen Natur.
@nawfal Ihr argument über die
int = System.Int32
ist sowohl falsch als auch irreführend - es ist falsch, weil int
alias ist nicht so umsetzen, wie du es beschreibst. Es ist irreführend, weil Sie impliziert type Aliase können verwendet werden, Global, genauso wie int
über Int32
. @KFL ich nicht implizieren. Ich habe gerade festgestellt, warum eine benutzerdefinierte Bezeichnung für eine Art nützlich sein könnte.
InformationsquelleAutor der Frage Brad | 2009-02-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dass ist eine Art alias, kein namespace-alias; es ist nützlich, um keine Verwechslungen - beispielsweise gegen:
(ps: danke für die Wahl
Timer
;-p)Sonst, wenn Sie beide verwenden
System.Windows.Forms.Timer
undSystem.Timers.Timer
in die gleiche Datei, die Sie würde zu halten, geben Sie den vollständigen Namen (daTimer
verwirrend sein könnte).Es spielt auch eine Rolle mit
extern
Aliase für die Verwendung von Typen mit den gleichen voll qualifizierten Typnamen von verschiedenen Baugruppen - selten, aber sinnvoll unterstützt werden.Eigentlich, ich kann sehen, einen anderen nutzen: wenn Sie wollen schnellen Zugriff auf einen Typ, aber nicht wollen, um mit einem regulären
using
weil Sie nicht importieren können einige widersprüchliche Erweiterung Methoden... ein wenig verworren, aber... hier ein Beispiel...InformationsquelleAutor der Antwort Marc Gravell
Ich benutze es, wenn ich habe mehrere namespaces mit widersprüchlichen sub-namespaces und/oder Objekt-Namen können Sie einfach etwas wie [als Beispiel]:
Denen würde anders geschrieben werden müssen:
Es spart eine Tonne von Typisierung und kann verwendet werden, um den code viel leichter zu Lesen.
InformationsquelleAutor der Antwort BenAlabaster
Zusätzlich zu den erwähnten Beispielen, Typ-Aliase (eher als namespace-Aliase) kann praktisch sein, wenn immer wieder Bezug auf generische Typen:
Versus:
InformationsquelleAutor der Antwort Joel Mueller
Verwende ich immer in Situationen wie dieser
wo
Utility
hätte sonst einen anderen Kontext (wieMyBaseNamespace.MySubNamespace.MySubSubNamespace.Utility
), aber ich erwarten/bevorzugenUtility
zu weisen immer wieder auf, dass eine bestimmte Klasse.InformationsquelleAutor der Antwort bdukes
Kürze.
Gibt es Nebenleistungen, Klarheit zu schaffen zwischen namespaces, welcher Anteil Typ-Namen, aber im wesentlichen ist es nur der Zucker.
InformationsquelleAutor der Antwort annakata
Ist es sehr nützlich, wenn Sie mehrere Klassen mit demselben Namen in mehreren namespaces enthalten. Zum Beispiel...
Können Sie Aliase verwenden, um den compiler glücklich zu machen und Dinge klarer für Sie und andere in Ihrem team:
InformationsquelleAutor der Antwort Sean Bright
Wir haben definierte namespace-Aliase für alle unsere namespaces. Dies macht es sehr einfach zu sehen, wo eine Klasse kommt, von, e.g:
und
Haben wir definiert einige Richtlinien, wie die Aliase müssen benannt werden und jeder, der Sie benutzt.
InformationsquelleAutor der Antwort M4N
In einer Weise, die es ist wirklich praktisch bei der Programmierung in Visual Studio.
Use-case: sagen wir, ich habe zu verwenden, nur wenige Klassen, z.B.
SqlConnection
aus einem namespaceSystem.Data
. In normal, werde ich natürlich importieren dieSystem.Data.SqlClient
namespace am Anfang des *.cs-Datei, wie unten gezeigt:Nun einen Blick auf meine intellisense. Es ist stark vermehrten ganze Menge von Klassen zur Auswahl bei der Eingabe im code-editor. Ich werde nicht verwenden ganze Reihe von Klassen an alle:
Also ich würde eher die Verwendung eines alias an der Spitze meiner *.cs-Datei und erhalten eine klare intellisense anzeigen:
Nun einen Blick auf meine intellisense anzeigen. Es ist super-clear-und super-sauber.
InformationsquelleAutor der Antwort RBT
Finde ich die Aliase, die sehr nützlich in unit-Tests. Beim schreiben von unit-tests, ist es eine gängige Praxis, zu erklären, das Thema zu testen, wie
wird
myClassUT
das Thema Under Test. Aber was, wenn Sie wollen, schreiben Sie unit-tests für eine statische Klasse mit statischen Methoden? Dann können Sie einen alias erstellen, wie diese:Dann Sie können schreiben Sie Ihre unit-tests wie dieser:
und Sie nie aus den Augen verlieren, was das Thema unter test ist.
InformationsquelleAutor der Antwort Charlie
Einen Grund, ich weiß; Es ermöglicht Ihnen, verwenden Sie kürzere Namen, wenn Sie haben, Kollisionen mit Namen von importierten namespaces angezeigt werden.
Beispiel:
Wenn Sie erklärt
using System.Windows.Forms;
undusing System.Windows.Input;
in der gleichen Datei, wenn Sie gehen, um ZugangModifierKeys
finden Sie möglicherweise, dass der nameModifierKeys
ist sowohl in derSystem.Windows.Forms.Control
undSystem.Windows.Input
namespaces.So, indem er erklärt
using Input = System.Windows.Input;
dann kann manSystem.Windows.Input.ModifierKeys
überInput.ModifierKeys
.Ich bin kein C# - buff, aber aliasing-Namensraum scheint, wie "best practise" zu mir. Auf diese Weise wissen Sie was Sie bekommen und immer noch nicht zu viel mehr.
InformationsquelleAutor der Antwort Zv_oDD