在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. 为什么全球+共享的速度比全球独自
- 6. CMMotionManager是一个全球资源?这是什么意思?
- 7. 什么的“全球::”在GTK程序
- 8. Struts 2中的全球前沿是什么?
- 9. “污染全球命名空间”是什么意思?
- 10. 什么是全球化和本地化概念
- 11. 什么是全球同步大量数据的最佳方式?
- 12. 什么是全球宝石中最有用的宝石?
- 13. 不是全球变量吗?
- 14. $范围是全球行事
- 15. 全球POST总是空
- 16. 是什么意思前缀“全球::”智能感知是显示我
- 17. 这行代码是做什么的?球员=(球员%2)? 1:2;
- 18. 私人全球与公共全球
- 19. 什么是全屏模式
- 20. 什么是“安全变量”?
- 21. 什么是运输安全?
- 22. 什么是IP安全?
- 23. 什么是春季安全
- 24. 什么是类型安全?
- 25. BC30456:CultureInfo的是不是全球化
- 26. 的RubyMine - 红宝石 - 这是什么[全球]意味着RVM,我应该使用全局或非全局SDK
- 27. 全球平台架构中个性化过程的确切目的是什么?
- 28. Backbone.js - 全球/共享/相关模型的最佳方法是什么?
- 29. 有一个全球性事件公共汽车的警告是什么?
- 30. 在本地或全球安装Express.js有什么好处
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