Mit dem globalen Namespace-Qualifikationsmerkmal können Sie auf ein Mitglied im globalen ("leeren") Namespace zugreifen.
Wenn Sie einen nicht qualifizierten Typ aufrufen (z. B. MyClass.DoSomething() anstelle von MyNamespace.MyClass.DoSomething()), wird davon ausgegangen, dass er sich im aktuellen Namespace befindet. Wie qualifizierst du den Typ, um zu sagen, dass er im globalen/leeren Namespace ist?
In diesem Codebeispiel (Konsolenanwendung) sollte sein Verhalten veranschaulichen:
using System;
namespace MyNamespace
{
public class Program
{
static void Main(string[] args)
{
MessageWriter.Write(); // writes "MyNamespace namespace"
global::MessageWriter.Write(); // writes "Global namespace"
Console.ReadLine();
}
}
// This class is in the namespace "MyNamespace"
public class MessageWriter
{
public static void Write()
{
Console.WriteLine("MyNamespace namespace");
}
}
}
// This class is in the global namespace (i.e. no specified namespace)
public class MessageWriter
{
public static void Write()
{
Console.WriteLine("Global namespace");
}
}
Dies beantwortet nicht die Frage, warum. Generierter Code verwendet Typen, die in Namespaces deklariert sind und weiterhin global :: verwendet werden. –
@Ihar: Global wird in ähnlicher Weise verwendet, um anzugeben, dass ein Namespace kein Subnamespace sein soll ... –
Nein - die Frage stellt drei Dinge: Was das bedeutet (erklärt), was dieses Präfix macht (erklärt) und wo ich sollte es verwenden (was Sie wissen werden, sobald Sie die anderen zwei Punkte verstanden haben). Ihre Frage - "Warum wird in Designer-Dateien verwendet?" Wurde vom ursprünglichen Fragesteller nicht gestellt. –