使用命名空间(C# 编程指南)

上一篇 / 下一篇  2009-03-18 11:21:19

在 C# 程序中,通过两种方式来大量使用命名空间。首先,.NET Framework 类使用命名空间来组织它的众多类。其次,在较大的编程项目中,声明自己的命名空间可以帮助控制类和方法名的范围。

访问命名空间

大多数 C# 应用程序从一个using指令节开始。该节列出应用程序将会频繁使用的命名空间,避免程序员在每次使用其中包含的方法时都要指定完全限定的名称。

例如,通过在程序开头包括行:

C#
usingSystem;

程序员可以使用代码:

C#
Console.WriteLine("Hello, World!");

而不是:

C#
System.Console.WriteLine("Hello, World!");

命名空间别名

using 指令(C# 参考)还可用于创建命名空间的别名。例如,如果使用包含嵌套命名空间的以前编写的命名空间,您可能希望声明一个别名来提供引用特定命名空间的简写方法,比如:

C#
usingCo = Company.Proj.Nested;// define an alias to represent a namespace

使用命名空间来控制范围

namespace关键字用于声明一个范围。在项目中创建范围的能力有助于组织代码,并提供创建全局唯一的类型的途径。在下面的示例中,名为SampleClass的类在两个命名空间中定义,其中一个命名空间嵌套在另一个之内。. 运算符(C# 参考)用于区分所调用的方法。

C#
namespaceSampleNamespace
{
classSampleClass
{
publicvoidSampleMethod()
{
System.Console.WriteLine(
"SampleMethod inside SampleNamespace");
}
}

// Create a nested namespace, and define another class.
namespaceNestedNamespace
{
classSampleClass
{
publicvoidSampleMethod()
{
System.Console.WriteLine(
"SampleMethod inside NestedNamespace");
}
}
}

classProgram
{
staticvoidMain(string[] args)
{
// Displays"SampleMethod inside SampleNamespace."
SampleClass uter =newSampleClass();
outer.SampleMethod();

// Displays"SampleMethod inside SampleNamespace."
SampleNamespace.SampleClass outer2 =newSampleNamespace.SampleClass();
outer2.SampleMethod();

// Displays"SampleMethod inside NestedNamespace."
NestedNamespace.SampleClass inner =newNestedNamespace.SampleClass();
inner.SampleMethod();
}
}
}

完全限定名

命名空间和类型的名称必须唯一,由指示逻辑层次结构的完全限定名描述。例如,语句A.B表示A是命名空间或类型的名称,而B则嵌套在其中。

下面的示例中有嵌套的类和命名空间。在每个实体的后面,需要完全限定名作为注释。

C#
namespaceN1// N1
{
classC1// N1.C1
{
classC2// N1.C1.C2
{
}
}
namespaceN2// N1.N2
{
classC2// N1.N2.C2
{
}
}
}

以上代码段中:

  • 命名空间N1是全局命名空间的成员。它的完全限定名是N1

  • 命名空间N2是命名空间N1的成员。它的完全限定名是N1.N2

  • C1N1的成员。它的完全限定名是N1.C1

  • 在此代码中使用了两次C2类名。但是,完全限定名是唯一的。第一个类名在C1内声明;因此其完全限定名是:N1.C1.C2。第二个类名在命名空间N2内声明;因此其完全限定名是:N1.N2.C2

使用以上代码段,可以用以下方法将新的类成员C3添加到命名空间N1.N2内:

C#
namespaceN1.N2
{
classC3// N1.N2.C3
{
}
}

一般情况下,应使用::来引用命名空间别名或使用global::来引用全局命名空间,并使用.来限定类型或成员。

与引用类型而不是命名空间的别名一起使用::是错误的。例如:

C#
usingAlias = System.Console;
C#
classTestClass
{
staticvoidMain()
{
// Error
//Alias::WriteLine("Hi");

// OK
Alias.WriteLine("Hi");
}
}

务必牢记单词global不是预定义的别名,因此global.X没有任何特殊的含义。仅当与::一起使用时,它才获得特殊的含义。

定义名为 global 的别名将会产生警告(请参见编译器警告(等级 2)CS0440),因为global::始终引用全局命名空间而不是别名。例如,下面的行将产生警告:

C#
usingglobal = System.Collections;// Warning

最好将::与别名一起使用,这样可以避免意外引入其他类型。以下面的代码为例:

C#
usingAlias = System;
C#
namespaceLibrary
{
publicclassC : Alias.Exception { }
}

这样做可行,但是如果接着引入一个名为Alias的类型,则Alias.将改为绑定到该类型。使用Alias::Exception可以确保Alias被当作命名空间别名,而不会被误认为类型。


TAG:

 

评分:0

我来说两句

日历

« 2024-04-18  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 7310
  • 日志数: 13
  • 建立时间: 2009-02-21
  • 更新时间: 2010-06-09

RSS订阅

Open Toolbar