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

为什么在C#中使用全局关键字?,c#,.net,namespaces,global,C#,.net,Namespaces,Global,我想了解您为什么要使用global::前缀。在以下代码中,ReSharper将其标识为冗余,并且可以将其删除: 关键字global::使编译器绑定从全局命名空间开始的名称,而不是当前上下文中的名称。当一个可绑定成员存在于一个与全局成员同名的给定上下文中,并且需要全局成员时,就需要它 比如说 class Test { class System {} public void Example() { System.Console.WriteLine("here"); // Error

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


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


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

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

“全局上下文关键字位于::运算符之前时,指的是全局名称空间,它是任何C#程序的默认名称空间,否则未命名。”


来源:

@John,只是好奇-试图了解代码生成过程为什么使用它。@John Saunders告诉某人忽略他们的好奇是一个可怕的建议。你到底希望人们如何学习@保罗·弗莱尔:我认为这是一个很好的问题——我自己也经常想知道同样的事情,但还没来得及问。@John——不知道如何回应你的评论“你的时间里没有更好的事情做吗?”。这段时间花在努力成为一名更好的开发人员和程序员上。“我想问你,难道你没有更好的事情去做,而不是留下对任何人都没有帮助的毫无意义的评论吗?”保罗说得很好。像约翰这样的人应该被禁止访问社区网站,因为这样的评论会极大地降低其他人的积极性。“好奇和猫,记住它。你没有更好的事情来打发你的时间吗?”这是我在问答论坛上见过的最愚蠢的评论。沙米·库雷希,如果你要逐字抄写答案,你至少需要提到来源。虽然你的答案确实不能回答这个问题,但我已经编辑了它,将它包括了你从中复制的URL。简短、简单、漂亮的答案