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

Cal*_*nus 7 c# namespaces

这是一个我已经有一段时间的问题,但实际上从来没有问过......

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

Rob*_*ine 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");
    }
}
Run Code Online (Sandbox Code Playgroud)

  • @lhar:oops - 在那里早点添加一点.正如Arjan所说,意味着要确保没有带有子命名空间的类.例如,如果设计者引用类型,System.Resources.ResourceManager在命名空间MyProject.Library一个自动生成的类,然后将其与全局前缀,它的原因是以防万一有实际上是一个类型MyProject.Library.System.Resources.ResourceManager .否则,第二种类型将被设计者无意中使用. (3认同)
  • @rob好,你的意思是对的.卡拉努斯接受了答案,所以我认为他的好奇心得到了满足.但在生成的代码中并非如此.您是否见过.net设计器文件中引用的全局命名空间中的类型?使用global :: qualifier的原因是在搜索嵌套命名空间时阻止类型解析冲突. (3认同)