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

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

替代文字

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

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

关键字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页面还有几个例子(包括上面的例子)

“全局上下文关键字,当它在::运算符之前时,引用全局命名空间,这是任何C#程序的默认命名空间,并且在其他情况下是未命名的。”

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