In C# sehe ich global::
ziemlich oft in automatisch generierten Code. Es ist nicht etwas, das ich jemals selbst benutzt habe, also weiß ich nicht, was der Zweck ist. Kann jemand das erklären?Was ist global ::?
Antwort
global bezieht sich auf den globalen Namespace, es kann verwendet werden, um Probleme zu lösen, wodurch Sie Typen neu definieren können. Zum Beispiel:
class foo
{
class System
{
}
}
Wenn Sie System verwenden sind, wo würde es lokal in der foo Klasse scoped wird, könnten Sie verwenden:
global::System.Console.WriteLine("foobar");
den globalen Namespace zuzugreifen.
Beispiel
using System;
class Foo
{
public void baz()
{
Console.WriteLine("Foo 1");
}
}
namespace Demo
{
class Foo
{
public void baz()
{
Console.WriteLine("Foo 2");
}
}
class Program
{
protected static global::Foo bar = new global::Foo();
static void Main(string[] args)
{
bar.baz(); // would write Foo 1 to console as it refers to global scope
Foo qux = new Foo();
qux.baz(); // would write Foo 2 to the console as it refers to the Demo namespace
}
}
}
Was würde passieren, wenn ich eine automatisch generierte Klasse mit einer Klasse vor dem globalen Namespace hätte und die Klasse Foo hieß? Ich hätte eine Klasse erstellt, die auch Foo hieß und auch keinen Namespace hatte? –
Wenn der automatisch generierten Klasse der globale Namespace vorangestellt ist und Foo heißt, verweist global auf die Klasse im globalen Namespace. Es kann nur eine einzige Definition mit demselben Namen in einem beliebigen Namespace geben. Wenn Sie eine Instanz der Klasse innerhalb eines anderen Namensraums erstellen würden, wobei Sie eine andere Bedeutung für Foo definieren würden, würde dies den meisten lokalen Bereich erfordern. Siehe die Bearbeitung – chrisw
Es ist ein manchmal notwendiges Präfix, das den Root-Namespace angibt.
Es wird häufig zum generierten Code hinzugefügt, um Namenskonflikte mit Benutzercode zu vermeiden. Stellen Sie sich zum Beispiel vor, Sie hätten eine Klasse namens System
, aber dann wollten Sie System.String
verwenden. Sie könnten global::System.String
verwenden, um zu unterscheiden.
Ich glaube, die ::
stammt aus C++, wo es als Namespace-Trennzeichen verwendet wird.
In der Praxis habe ich es nie verwendet, außer beim Generieren von Code. Beachten Sie, dass Sie einige Konflikte auch mithilfe von Aliasen umgehen können. Zum Beispiel using String = System.String;
Das global
kontextuelle Stichwort, wenn es darum geht, vor dem Operator ::, bezieht sich auf den globalen Namensraum, der der Standard-Namespace für jedes C# Programm und ist ansonsten nicht namentlich.
Der Spezifizierer global::
weist den Compiler an, nach dem Namespace oder der Klasse zu suchen, beginnend mit dem Stammverzeichnis. Sie werden es im systemgenerierten Code sehen, so dass der Code immer funktioniert. Auf diese Weise entsteht kein Konflikt, wenn Sie einen Namespace direkt unter Ihrem aktuellen Namespace haben, der dem Namespace der obersten Ebene entspricht, auf den der Code zugreifen möchte.
Zum Beispiel, Sie haben Namespace A und Namespace B und Namespace B.A, wenn ich Code in Namespace B.A schreiben, die auf eine Klasse im Namespace A verweisen muss, ohne global :: Ich habe keine Möglichkeit, um zu bekommen. Wenn ich A.classname referenziere, sucht der Compiler in B.A nach dem Klassennamen. Mit global :: kann ich sagen, dass es in global :: A.classname nach dem Klassennamen suchen soll und es findet den Klassennamen am richtigen Ort.
Wenn Sie Inhalte aus Online-Ressourcen nehmen, seien Sie bitte so freundlich, die richtige Zuordnung zu bieten: [MSDN] (http://msdn.microsoft.com)com/de-us/library/cc713620.aspx) und [Was ist das globale Schlüsselwort in C#] (http://blog.dmbcllc.com/what-is-the-global-keyword-in-csharp/) – Bart
k .. @ Bart, danke für deinen Kommentar, den ich mir merken werde, wenn ich das nächste Mal antworte. Aber warum ist das ein Downvote? – coder
Das ist nicht meins. – Bart
- 1. Was ist 'JNI Global reference'?
- 2. Was ist der Unterschied zwischen `global-set-key` ist und` definieren schlüssel global-map` in Emacs
- 3. Ist KnockoutJS "global sicher"?
- 4. Was bedeutet global in Javascript
- 5. Was ist ein npm-Befehl, um devDependencies global zu installieren?
- 6. Nameerror: global Name '_' ist nicht
- 7. Wie zu beheben? DeprecationWarning: 'GLOBAL' ist veraltet, verwenden Sie 'global'
- 8. Nameerror: global name ‚fileinput‘ ist nicht definiert
- 9. Nameerror: global name 'x' ist nicht definiert
- 10. Warum eine Variable definiert global ist undefiniert?
- 11. Ist die Salesforce-Endpunktversion global gleich?
- 12. Warum global ist null in der Funktion?
- 13. Python Nameerror: global name ‚assertEqual‘ ist nicht
- 14. Python: global name 'Maximum' definiert ist, nicht
- 15. Was bedeutet global :: in den .Net-Designer-Dateien?
- 16. Was fügt global einen Header "x-frame-options: deny" hinzu?
- 17. Asp.net „Global“ Variablen
- 18. Logging global (über Pakete)
- 19. Statisch vs global
- 20. Java Right Click trifft keine Auswahl. Was ist der einfachste Weg, dies global zu lösen?
- 21. Unity3d - eulerAngles (lokal und global) völlig anders als was in Inspektor ist
- 22. Was ist der Vorteil von `module.exports`, wenn ich Module auf` global` definiere?
- 23. Was der http.proxy in 'git config---global http.proxy https://127.0.0.1:3128' ist
- 24. Was ist die beste Praxis von Global Dialog in meiner Anwendung
- 25. OpenCL global memory holt
- 26. Zugriff auf Werte global
- 27. "global main" in Assembly
- 28. CRM 2013: Global JavaScript
- 29. Global before_filter in Schienen
- 30. Loading Vulkan Funktionen global
http://stackoverflow.com/questions/3552763/why-use-global-keyword-in-net –
Von msdn: http://msdn.microsoft.com/en-us/library/c3ay4x3d.aspx –