为啥在 C# 中使用 global 关键字?
Posted
技术标签:
【中文标题】为啥在 C# 中使用 global 关键字?【英文标题】:Why use the global keyword in C#?为什么在 C# 中使用 global 关键字? 【发布时间】:2011-04-02 22:31:39 【问题描述】:我想了解您为什么要使用global::
前缀。在以下代码中,ReSharper 将其标识为多余的,并且可以删除:
【问题讨论】:
@John,只是好奇 - 试图了解为什么它被代码生成过程使用。 @John-Saunders 告诉某人忽略他们的好奇心是可怕的建议。你究竟希望人们如何学习? @Paul-Fryer 我认为这是一个很好的问题 - 我自己也经常想知道同样的事情,但还没有来得及问。 @John - 不知道如何回复您的评论“您的时间没有更好的事情可做”。这段时间花在尝试成为更好的开发人员和程序员上。我会问你难道没有比留下对任何人都没有帮助的无意义的cmets更好的事情吗? 保罗说得好。应该禁止像 John 这样的人访问社区网站,因为这样的 cmets 会极大地削弱其他人的精神。 “好奇心和猫,记住了。你的时间没有更好的事情可做吗?”这是我在问答论坛上见过的最愚蠢的评论。 【参考方案1】:关键字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页面还有几个例子(包括上面那个)
http://msdn.microsoft.com/en-us/library/c3ay4x3d.aspx【讨论】:
【参考方案2】:最好在生成的代码中使用全局命名空间前缀。这样做是为了避免在您的命名空间中存在类似命名类型的情况。
如果您创建一个名为System.Diagnostics.DebuggerNonUserCodeAttribute
的类型在您的命名空间内,您会注意到ReSharper 不再说不需要global::
。代码生成器只是想避免与您自己的类型名称发生任何冲突。
【讨论】:
简短、简单、漂亮的答案【参考方案3】:“全局上下文关键字,当它出现在 :: 运算符之前时,指的是全局命名空间,它是任何 C# 程序的默认命名空间,否则未命名。”
来源:https://msdn.microsoft.com/en-us/library/cc713620.aspx
【讨论】:
Shami Qureshi,如果您要逐字复制答案,您至少需要提及来源。尽管您的回答确实没有回答问题,但我已对其进行了编辑以包含您从中复制它的 URL。以上是关于为啥在 C# 中使用 global 关键字?的主要内容,如果未能解决你的问题,请参考以下文章