Dies ist ein Eckfall ::
(wie der @
Präfix) ist da, um mit den ziemlich seltenen Vorkommen, wo ein Name Konflikte zwischen Namespaces, Klassen und Schlüsselwörter.
::
funktioniert nur für Namespaces (und Namespace-Aliase), während .
. funktioniert sowohl für Namespaces als auch für Subclasses. An den meisten Orten, an denen Sie es brauchen würden, wäre es besser, stattdessen einen anderen Namen zu verwenden, aber das ist nicht immer eine Option.
global::
ist ein Sonderfall, der am häufigsten in automatisch generiertem Code zu sehen ist - er setzt den referenzierten Namespace auf den Stamm zurück.
Angenommen, Sie generieren automatisch Code (z. B. für eine Formularanwendung, EF oder ähnliche Anwendungen), und Ihre App verwendet den Namespace YourCompany.Application
. Jetzt entscheidet sich einer Ihrer Kunden (mit Ihrer automatischen Generierung), einen eigenen Namensraum in seiner App TheirCompany.YourCompany.Application
hinzuzufügen. Jetzt alle Ihre Auto-Code schlägt fehl, weil, wenn es kompiliert. NET weiß nicht, ob Sie Ihren Namespace oder deren verwenden.
Um diesen Generierungscode mit global::YourCompany.Application
zu reparieren, können diejenigen, die Ihren automatischen Generator verwenden, den Namespace verwenden, der ihnen gefällt, und keinen Konflikt verursachen.
Ich glaube, Microsoft hinzugefügt global::
, weil sie einige .NET-Kunden erwarten, Namespaces wie System
hinzufügen.
+1 Nur weil ich seit ein paar Jahren in C# programmiert habe und ich diesen Operator noch nirgends gesehen habe. : D – Tudor
@Tudor Gleiche Situation hier :) Sehr selten gesehen, aber ich lief heute darüber und wollte mehr erfahren. –