这是一个我已经有一段时间的问题,但从未真正开始问过......
在Visual Studio生成的很多设计器文件中,有些变量以global为前缀::有人可以解释这意味着什么,这个前缀的作用以及我应该在哪里使用它?
答案 0 :(得分:12)
全局命名空间限定符允许您访问全局(“空”)命名空间中的成员。
如果要调用非限定类型(例如MyClass.DoSomething()而不是MyNamespace.MyClass.DoSomething()),则假定它位于当前名称空间中。那么如何限定类型以说它在全局/空命名空间中?
此代码示例(控制台应用程序)应说明其行为:
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");
}
}
答案 1 :(得分:4)
前缀表示全局命名空间。这是一个例子:
namespace Bar {
class Gnat { }
}
namespace Foo {
namespace Bar {
class Gnat { }
}
class Gnus {
Bar.Gnat a; // Foo.Bar.Gnat
global::Bar.Gnat b; // Bar.Gnat
}
}
注意成员a可能无意中引用了Foo.Bar.Gnat类。为避免这种情况,请使用global :: prefix。
答案 2 :(得分:3)
global :: namespace限定符用于自动生成,以防止通过嵌套命名空间解析类型中的冲突。
答案 3 :(得分:1)
来自here
当左侧标识符为全局时, 搜索正确的标识符 从全局命名空间开始。