using System;
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() { // Error Accesses TestApp.Console //Console.WriteLine(number); }}由于类 TestApp.System 隐藏了 System 命名空间,因此使用 System.Console 仍然会导致错误:
// Error Accesses TestApp.SystemSystem.Console.WriteLine(number);
但是,可以通过使用 global::System.Console 避免这一错误,如下所示:
global::System.Console.WriteLine(number);
显然,并不推荐创建自己的名为 System 的命名空间,您不可能遇到出现此情况的任何代码。但是,在较大的项目中,很有可能在一个窗体或其他窗体中出现命名空间重复。在这种情况下,全局命名空间限定符可保证您可以指定根命名空间。
global 是 C# 2.0 中新增的关键字,理论上说,如果代码写得好的话,根本不需要用到它。假设你现在写了一个类,名字叫 System。那么当你再在代码里写 System 的时候,编译器就不知道你是要指你写的 System 类还是系统的 System 命名空间,而 System 命名空间已经是根命名空间了,无法再通过完全限名来指定。在以前的 C# 版本中,这就是一个无法解决的问题。现在,可以通过global::System 来表示 System 根命名空间,
而用你自己的 MyNamespace.System 来表示自己的类。当然,这种情况不应该出现,你不应该写一个名为 System 的类。
转自: