在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'但是有一个命名空间,所以我需要区分......
答案 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)代码不包含不合格或部分合格的名称