什么是全球::?

在C#中,我经常在自动生成的代码中看到global:: 。 这不是我曾经用过的东西,所以我不知道它的目的是什么。 有人可以解释这个吗?

全局是指全局命名空间,它可以用来解决问题,你可以重新定义types。 例如:

 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 } } } 

这是需要指定根名称空间的前缀。

它通常被添加到生成的代码,以避免与用户代码的名称冲突。

例如,假设你有一个名为System的类,但是你想使用System.String 。 你可以使用global::System.String来区分。

我相信::来自C ++,它用作命名空间分隔符。

在实践中,我从来没有使用它,除了生成代码。 请注意,您也可以通过使用别名来解决一些冲突。 例如using String = System.String;

global上下文关键字,当它在::运算符之前时,引用全局名称空间,这是任何C#程序的默认名称空间,否则是未命名的。

global:: specifier告诉编译器开始寻找从根开始的命名空间或类。 您将在系统生成的代码中看到它,以便代码始终有效。 这样,如果您的当前命名空间下有一个名称空间,与代码尝试访问的顶级命名空间相同,则不会有冲突。

例如,如果我在需要引用名称空间A中的类的名称空间BA中编写代码,而没有全局::我没有办法获取它,那么假设您有名称空间A和名称空间B以及名称空间BA。 如果我引用A.classname,编译器将在BA中查找classname。通过global ::我可以告诉它在global :: A.classname中查找classname,它将在适当的位置查找classname。