如果没有定义名称空间,类将具有什么名称空间

时间:2014-08-25 17:47:26

标签: c# namespaces

在C#中,如果我创建一个没有命名空间的类,那么在尝试实例化该类时我将使用哪个命名空间?

例如,假设main是......

namespace NamespaceTests
{
    class Program
    {
        static void Main(string[] args)
        {

        }
    }
}

...并假设我的无命名空间类是......

public class test
{
    public string SayHello()
    {
        return "Hello World!";
    }
}

...并假设我有一个同名的另一个类,但具有默认的命名空间......

namespace NamespaceTests
{
    public class test
    {
        public string SayHello()
        {
            return "Hello Moon...";
        }
    }
}

...我如何修改main以包含无名称空间类的实例并调用' SayHello'检索消息" Hello World!"?具体来说,我如何完全限定无名称空间的类' test',特别是考虑到我可能有另一个类也被称为' test'但是有一个命名空间,所以我需要区分......

3 个答案:

答案 0 :(得分:42)

它位于global namespace中,可以像这样引用:

var x = new global::test();

答案 1 :(得分:11)

未在命名空间中定义的类型将位于global命名空间中。

  

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

     

以下示例显示如何使用全局contextual关键字   指定在全局命名空间中定义类TestApp:

C# class TestClass : global::TestApp { }

答案 2 :(得分:5)

除了上述答案外,还需要注意的是,所有Type(无论其声明位置如何)都有一个“完全限定名称”,该名称以“ global ::”开头

摘自“ O'Relly。简而言之,C#”:

所有类型名称在编译时都会转换为标准名称。中间语言(IL)代码不包含不合格或部分合格的名称