我正在查看此页MSDN: Global namespace alias。
他们在那里有以下代码。
class TestApp
{
// Define a new class called 'System' to cause problems.
public class System { }
// Define a constant called 'Console' to cause more problems.
const int Console = 7;
const int number = 66;
static void Main()
{
// The following line causes an error. It accesses TestApp.Console,
// which is a constant.
//Console.WriteLine(number);
}
}
他们举了更多例子。
我了解global
如何在这里使用:
// OK
global::System.Console.WriteLine(number);
但是,我不明白以下内容(特别是global::TestApp
和:
在同一行上的使用方式):
class TestClass : global::TestApp
MSDN页面说明了上述代码:“以下声明引用TestApp作为全局空间的成员。”。
有人可以解释一下吗?
感谢。
答案 0 :(得分:2)
这是针对存在于全局级别的类TestApp的强命名,类似于System。如果您要说class TestClass : global::System.Console
,您将继承全局系统控制台(如果这是合法的)。因此,在此示例中,您将继承在全局范围内定义的TestApp。
因此,为了更加清晰,请考虑以下命名空间模型:
namespace global
{
// all things are within this namespace, and therefor
// it is typically deduced by the compiler. only during
// name collisions does it require being explicity
// strong named
public class TestApp
{
}
namespace Program1
{
public class TestClass : global::TestApp
{
// notice how this relates to the outermost namespace 'global'
// as if it were a traditional namespace.
// the reason this seems strange is because we traditionally
// develop at a more inner level namespace, such as Program1.
}
}
}
答案 1 :(得分:1)
global
在两者中的使用方式相同:
global::System.Console.WriteLine(number);
是
System.Console.WriteLine(number);
as
class TestClass : global::TestApp
是
class TestClass : TestApp
单个冒号只是常规继承。
答案 2 :(得分:1)
也许这个例子会更好地说明它:
<强>代码:强>
namespace Test
{
class Program
{
static void Main(string[] args)
{
var myClass1 = new MyClass();
var myClass2 = new global::MyClass();
}
public class MyClass { }
}
}
public class MyClass { }
<强>解释强>
myClass1
是Test
命名空间
myClass2
是global
命名空间中的类的实例,也就是没有命名空间。
global::
可用于访问本地定义的对象隐藏的项目。在这种情况下,Test.MyClass
会隐藏对global::MyClass
的访问权限。