在C#中,我经常在自动生成的代码中看到global::
。这不是我曾经用过的自己,所以我不知道它的目的是什么。有人可以解释这个吗?什么是全球::?
什么是全球::?
回答
全球是指全局命名空间,它可以用来解决问题,让你可以重新定义类型。例如:
class foo
{
class System
{
}
}
如果你使用一种系统,其中,将在Foo类进行局部范围,你可以使用:
global::System.Console.WriteLine("foobar");
访问全局命名空间。
例
using System;
class Foo
{
public void baz()
{
Console.WriteLine("Foo 1");
}
}
namespace Demo
{
class Foo
{
public void baz()
{
Console.WriteLine("Foo 2");
}
}
class Program
{
protected static global::Foo bar = new global::Foo();
static void Main(string[] args)
{
bar.baz(); // would write Foo 1 to console as it refers to global scope
Foo qux = new Foo();
qux.baz(); // would write Foo 2 to the console as it refers to the Demo namespace
}
}
}
如果我有一个带有全局名称空间前缀的类的自动生成的类,并且该类名为Foo,那么会发生什么?我有一个我创建的类,也称为Foo,它也没有名称空间? – 2013-02-22 11:07:04
如果自动生成的类以全局名称空间为前缀并且名为Foo,则global将引用全局名称空间中的类。在任何名称空间中只能有一个具有相同名称的定义。如果您要从另一个名称空间内创建类的实例,从而为Foo定义了另一个含义,则它将占用本地最多的作用域。请参阅编辑 – chrisw 2013-02-22 11:19:20
这表明根命名空间的某个时候,必要的前缀。
它经常加入到生成的代码,以避免名称冲突与用户代码。
例如,假设您有一个名为System
的课程,但您希望使用System.String
。您可以使用global::System.String
来区分。
相信::
来自C++使用它的一个命名空间分隔。
在实践中,我从来没有使用过,除了在生成代码。请注意,您也可以通过使用别名来解决一些冲突。例如using String = System.String;
的global
上下文关键字,当谈到::运算之前,指的是全局命名空间,这是任何C#程序的默认命名空间,否则命名。
的global::
符告诉编译器开始寻找从根本上命名空间或类起动。您将在系统生成的代码中看到它,以便代码始终有效。这样,如果您的当前命名空间下有一个名称空间,与代码尝试访问的顶级命名空间相同,则不会有冲突。
例如,假设您有命名空间A和命名空间B以及命名空间B.A,如果我在命名空间B.A中编写需要引用命名空间A中的类的代码,而没有全局::我无法获取它。如果我引用A.classname,编译器将在B.A.中查找classname。使用global ::我可以告诉它在global :: A.classname中查找classname,它会在适当的位置找到classname。
如果您从网上资源获取内容,请提供适当的归属信息:[MSDN](http://msdn.microsoft.com/zh-cn/com/en-us/library/cc713620.aspx)和[什么是C#中的全局关键字](http://blog.dmbcllc.com/what-is-the-global-keyword-in-csharp/) – Bart 2013-02-26 10:47:07
k .. @巴特感谢您的评论当我下次回答时,我会记住。但为什么这是downvote? – coder 2013-02-26 11:29:30
那不是我的。 – Bart 2013-02-26 11:34:20
- 1. 什么是:全球(冒号全球)呢?
- 2. 什么是在全球WP_Query
- 3. 全球步骤是什么意思?
- 4. 这个全球目标是什么?
- 5. 什么是eclipse全球ecore资源集
- 6. 什么是球拍
- 7. 什么是弱全球参考?它与全球参考文献有何不同?
- 8. 为什么全球+共享的速度比全球独自
- 9. CMMotionManager是一个全球资源?这是什么意思?
- 10. 为什么grunt允许全球安装?
- 11. 什么的“全球::”在GTK程序
- 12. Python - 全球有什么优先权?
- 13. 什么是全球性的关键字在JavaScript注释目的
- 14. R的本地/全球问题是什么?
- 15. 什么是全球同步大量数据的最佳方式?
- 16. Struts 2中的全球前沿是什么?
- 17. 全球聊天应用的正确编程模式是什么?
- 18. <script>标签的全球范围是什么?
- 19. “污染全球命名空间”是什么意思?
- 20. 什么是全球化和本地化概念
- 21. 什么是全球宝石中最有用的宝石?
- 22. 为什么全球化一个布尔不工作,但全球化的字典
- 23. 是什么意思前缀“全球::”智能感知是显示我
- 24. $范围是全球行事
- 25. 本地还是全球?
- 26. SetWindowsHook Global不是很全球
- 27. 是否在全球领域
- 28. 全球POST总是空
- 29. 不是全球变量吗?
- 30. 休眠@SequenceGenerator不是全球
http://stackoverflow.com/questions/3552763/why-use-global-keyword-in-net – 2013-02-22 10:51:49
从msdn:http://msdn.microsoft.com/en-us/library/c3ay4x3d.aspx – 2013-02-22 10:52:46