【发布时间】:2009-07-10 07:43:36
【问题描述】:
这是一个我已经有一段时间了但实际上从来没有问过的问题......
在 Visual Studio 生成的很多设计器文件中,一些变量都带有前缀 global:: 有人能解释一下这是什么意思,这个前缀有什么作用以及我应该在哪里使用它?
【问题讨论】:
标签: c# namespaces
这是一个我已经有一段时间了但实际上从来没有问过的问题......
在 Visual Studio 生成的很多设计器文件中,一些变量都带有前缀 global:: 有人能解释一下这是什么意思,这个前缀有什么作用以及我应该在哪里使用它?
【问题讨论】:
标签: c# namespaces
全局命名空间限定符允许您访问全局(“空”)命名空间中的成员。
如果您要调用非限定类型(例如 MyClass.DoSomething() 而不是 MyNamespace.MyClass.DoSomething()),则假定它位于当前命名空间中。那么你如何限定类型说它在 global/empty 命名空间中呢?
此代码示例(控制台应用程序)应说明其行为:
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");
}
}
【讨论】:
前缀表示全局命名空间。这是一个例子:
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:: 前缀。
【讨论】:
global:: 命名空间限定符用于自动生成,以防止通过嵌套命名空间进行类型解析时发生冲突。
【讨论】:
来自here
当左标识符为全局时, 寻找正确的标识符 从全局命名空间开始。
【讨论】: