命名空間

 命名空間提供了一種組織相關類和其他類型的方式。與文件或組件不同,命名空間是一種邏輯組合,而不是物理組合。在C#文件中定義類時,可以把它包括在命名空間定義中。以後,在定義另一個類,在另一個文件中執行相關操作時,就可以在同一個命名空間中包含它,創建一個邏輯組合,告訴使用類的其他開發人員:這兩個類是如何相關的以及如何使用它們

namespace CustomerPhoneBookApp
{
using System;

public struct Subscriber
{
// Code for struct here...
}
}

把一個類型放在命名空間中,可以有效地給這個類型指定一個較長的名稱,該名稱包括類型的命名空間,後面是句點(.)和類的名稱。在上面的例子中,Subscriber結構的全名是CustomerPhoneBookApp.Subscriber。這樣,有相同短名的不同的類就可以在同一個程序中使用了。全名常常稱爲完全限定的名稱。

也可以在命名空間中嵌套其他命名空間,爲類型創建層次結構:

namespace Wrox
{
namespace ProCSharp
{
namespace Basics
{
class NamespaceExample
{
// Code for the class here...
}
}
}
}

每個命名空間名都由它所在命名空間的名稱組成,這些名稱用句點分隔開,首先是最外層的命名空間,最後是它自己的短名。所以ProCSharp命名空間的全名是Wrox.ProCSharp,NamespaceExample類的全名是Wrox.ProCSharp.Basics.NamespaceExample。

使用這個語法也可以組織自己的命名空間定義中的命名空間,所以上面的代碼也可以寫爲:

namespace Wrox.ProCSharp.Basics
{
class NamespaceExample
{
// Code for the class here...
}
}

注意不允許在另一個嵌套的命名空間中聲明多部分的命名空間

using語句

命名空間相當長,鍵入起來很繁瑣,用這種方式指定某個類也是不必要的。

C#允許簡寫類的全名。爲此,要在文件的頂部列出類的命名空間,前面加上using關鍵字。在文件的其他地方,就可以使用其類型名稱來引用命名空間中的類型了:

using System;
using Wrox.ProCSharp;

如果using指令引用的兩個命名空間包含同名的類型,就必須使用完整的名稱(或者至少較長的名稱),確保編譯器知道訪問哪個類型

using Wrox.ProCSharp;

class Test
{
public static int Main()
{
Basics.NamespaceExample nSEx = new Basics.NamespaceExample();
//do something with the nSEx variable
return 0;
}

命名空間的別名

using關鍵字的另一個用途是給類和命名空間指定別名。如果命名空間的名稱非常長,又要在代碼中使用多次,但不希望該命名空間的名稱包含在using指令中(例如,避免類名衝突),就可以給該命名空間指定一個別名,其語法如下:

using alias = NamespaceName;

給Wrox.ProCSharp.Basics命名空間指定Introduction別名,並使用這個別名實例化了一個NamespaceExample對象,這個對象是在該命名空間中定義的。注意命名空間別名的修飾符是::。

using System;
using Introduction = Wrox.ProCSharp.Basics;
class Test
{
public static int Main()
{
Introduction::NamespaceExample NSEx =
new Introduction::NamespaceExample();
Console.WriteLine(NSEx.GetNamespace());
return 0;
}
}  

namespace Wrox.ProCSharp.Basics
{
class NamespaceExample
{
public string GetNamespace()
{
return this.GetType().Namespace;
}
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章