全局::在.Net设计器文件中意味着什么?

时间:2009-07-10 07:43:37

标签: c# namespaces

这是一个我已经有一段时间的问题,但从未真正开始问过......

在Visual Studio生成的很多设计器文件中,有些变量以global为前缀::有人可以解释这意味着什么,这个前缀的作用以及我应该在哪里使用它?

4 个答案:

答案 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

  

当左侧标识符为全局时,   搜索正确的标识符   从全局命名空间开始。