首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >什么是global::?

什么是global::?
EN

Stack Overflow用户
提问于 2013-02-22 18:50:26
回答 4查看 52K关注 0票数 146

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-02-22 18:55:28

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

代码语言:javascript
复制
class foo
{
    class System
    {

    }

}

如果您要在foo类中使用System,则可以使用:

代码语言:javascript
复制
global::System.Console.WriteLine("foobar");

来访问全局命名空间。

示例

代码语言:javascript
复制
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
        }
    }
}
票数 122
EN

Stack Overflow用户

发布于 2013-02-22 18:52:03

它有时是一个必要的前缀,表示根名称空间。

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

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

我相信::来自C++,在那里它被用作名称空间分隔符。

实际上,除了在生成代码时,我从未使用过它。请注意,您还可以通过使用别名来绕过一些冲突。例如using String = System.String;

票数 35
EN

Stack Overflow用户

发布于 2013-02-22 18:59:54

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

global::说明符告诉编译器从根开始查找名称空间或类。您将在系统生成的代码中看到它,以便代码始终正常工作。这样,如果您的当前命名空间下有一个与代码试图访问的顶级命名空间相同的命名空间,就不会出现冲突。

例如,假设您有名称空间A、名称空间B和名称空间B.A。如果我在名称空间B.A中编写需要引用名称空间A中的类的代码,而没有global::我就无法访问它。如果我引用A.classname,编译器将在B.A中查找类名。使用global::我可以告诉编译器在global::A.classname中查找类名,它会在正确的位置找到类名。

票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15022441

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档