您的位置:首页 > 其它

使用命名空间别名限定符

2010-06-02 11:38 190 查看
当成员可能被同名的其他实体隐藏时,能够访问全局命名空间中的成员非常有用。

例如,在下面的代码中,Console 在 System 命名空间中解析为 TestApp.Console 而不是 Console 类型。

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.System
System.Console.WriteLine(number);

但是,可以通过使用 global::System.Console 避免这一错误,如下所示:



// OK
global::System.Console.WriteLine(number);

当左侧的标识符为 global 时,对右侧标识符的搜索将从全局命名空间开始。例如,下面的声明将 TestApp 作为全局空间的一个成员进行引用。



class TestClass : global::TestApp

显然,并不推荐创建自己的名为 System 的命名空间,您不可能遇到出现此情况的任何代码。但是,在较大的项目中,很有可能在一个窗体或其他窗体中出现命名空间重复。在这种情况下,全局命名空间限定符可保证您可以指定根命名空间。

示例

在此示例中,命名空间 System 用于包括类 TestClass,因此必须使用 global::System.Console 来引用 System.Console 类,该类被 System 命名空间隐藏。而且,别名 colAlias 用于引用命名空间 System.Collections;因此,将使用此别名而不是命名空间来创建 System.Collections.Hashtable 的实例。



using colAlias = System.Collections;
namespace System
{
class TestClass
{
static void Main()
{
// Searching the alias:
colAlias::Hashtable test = new colAlias::Hashtable();

// Add items to the table.
test.Add("A", "1");
test.Add("B", "2");
test.Add("C", "3");

foreach (string name in test.Keys)
{
// Seaching the gloabal namespace:
global::System.Console.WriteLine(name + " " + test[name]);
}
}
}
}

示例输出

A 1
B 2
C 3
转自MSDN:http://msdn.microsoft.com/zh-cn/library/c3ay4x3d(VS.80).aspx
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: