为什么在C#中使用global关键字?

时间:2010-08-24 00:39:46

标签: c# .net namespaces global

我想了解您为什么要使用global::前缀。在以下代码中,ReSharper将其识别为冗余,并且能够将其删除:

alt text

3 个答案:

答案 0 :(得分:65)

关键字global::使编译器绑定从全局命名空间开始而不是在当前上下文中的名称。在可绑定成员存在于给定上下文中且与全局成员具有相同名称并且需要全局成员的地方需要它。

例如

class Test {
  class System {}
  public void Example() {
    System.Console.WriteLine("here"); // Error since System binds to Test.System
    global::System.Console.WriteLine("here"); // Works
}

相应的MSDN页面还有一些示例(包括上面的一个)

答案 1 :(得分:51)

最好在生成的代码中使用全局名称空间前缀。这样做是为了避免命名空间中存在类似命名类型的情况。

如果在命名空间中创建名为System.Diagnostics.DebuggerNonUserCodeAttribute 的类型,您会注意到ReSharper不再说不需要global::。代码生成器只是想避免与您自己类型的名称发生任何冲突。

答案 2 :(得分:2)

  

“全局上下文关键字,当它出现在::运算符之前时,引用全局命名空间,它是任何C#程序的默认命名空间,否则是未命名的。”

来源:https://msdn.microsoft.com/en-us/library/cc713620.aspx