chr*_*isw 91
global指的是全局命名空间,它可用于解决可能重新定义类型的问题.例如:
class foo
{
class System
{
}
}
Run Code Online (Sandbox Code Playgroud)
如果您要使用系统,它将在foo类中本地作用域,您可以使用:
global::System.Console.WriteLine("foobar");
Run Code Online (Sandbox Code Playgroud)
访问全局命名空间.
例
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
}
}
}
Run Code Online (Sandbox Code Playgroud)
Dre*_*kes 25
它是一个必要的前缀,表示根命名空间.
它经常被添加到生成的代码中,以避免与用户代码的名称冲突.
例如,假设你有一个叫做的类System,但是你想要使用它System.String.你可以global::System.String用来区分.
我相信::它来自C++,它被用作命名空间分隔符.
在实践中,除了生成代码之外,我从未使用它.请注意,您还可以通过使用别名来解决一些冲突.例如using String = System.String;
cod*_*der 12
该global上下文关键字,当谈到::运算之前,指的是全局命名空间,这是任何C#程序的默认命名空间,否则命名.
该global::说明符告诉编译器开始寻找从根本上命名空间或类起动.您将在系统生成的代码中看到它,以便代码始终有效.这样,如果您当前命名空间下的命名空间与代码尝试访问的顶级命名空间相同,则不会发生冲突.
例如,如果我在命名空间BA中编写需要引用命名空间A中的类的代码,而没有global ::我无法获取它,那么假设你有命名空间A和命名空间B以及命名空间BA.如果我引用A.classname,编译器将在BA中查找classname使用global :: I可以告诉它在global :: A.classname中查找classname,它会在正确的位置找到classname.