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

Pau*_*yer 55 .net c# namespaces global

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

替代文字

Jar*_*Par 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
}
Run Code Online (Sandbox Code Playgroud)

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


Mar*_*age 51

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

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