命名空間

命名空間

命名空間 (namespace) 將相關的類型進行分組的邏輯命名方案。

定義

NET Framework 使用分層命名方案,將類型分為相關功能的邏輯類別,如 ASP.NET 技術或遠程處理功能。

命名

設計工具可以使用命名空間,使開發人員在他們的代碼中瀏覽和引用類型更為方便。單個程式集可以包含其分層名稱具有不同命名空間根的類型,而且邏輯命名空間根可以跨多個程式集。在 .NET Framework 中,命名空間在邏輯設計時提供命名方便,而程式集在運行時確定類型的命名範圍

命名衝突,由於 XML 中的元素名是預定義的,當兩個不同的文檔使用相同的元素名時,就會發生命名衝突。

詳解

而DFS命名空間也正是為企業內部龐大的實體存儲媒介,提供了一個容易辨識的邏輯而DFS命名空間也正是為企業內部龐大的實體存儲媒介,提供了一個容易辨識的邏輯

命名空間提供了一種組織相關類和其他類型的方式。與檔案或組件不同,命名空間是一種邏輯組合,而不是物理組合。在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...
 }
}
 }
}
每個命名空間名都由它所在命名空間的名稱組成,這些名稱用句點分隔開,首先是最外層的命名空間,最後是它自己的短名。所以ProfessionalCSharp命名空間的全名是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;

如前所述,所有的C#原始碼都以語句using System;開頭,這僅是因為Microsoft提供的許多有用的類都包含在System命名空間中。如果using指令引用的兩個命名空間包含同名的類,就必須使用完整的名稱(或者至少較長的名稱),確保編譯器知道訪問哪個類型,例如,類NamespaceExample同時存在於Wrox.ProCSharp.Basics和Wrox.ProCSharp.OOP命名空間中,如果要在命名空間Wrox.ProCSharp中創建一個類Test,並在該類中實例化一個NamespaceExample類,就需要指定使用哪個類:
using Wrox.ProCSharp;
class Test
{
 public static int Main()
 {
Basics.NamespaceExample nSEx = new Basics.NamespaceExample();
//do something with the nSEx variable
return 0;
 }
}
因為using語句在C#檔案的開頭,C和C++也把#include放在這裡,所以從C++遷移到C#的程式設計師常把命名空間與C++風格的頭檔案相混淆。不要犯這種錯誤,using語句在這些檔案之間並沒有真正建立物理連結。C#也沒有對應於C++頭檔案的部分。

公司應花一定的時間開發一種命名空間模式,這樣其開發人員才能快速定位他們所需要的功能,而且公司內部使用的類名也不會與外部的類庫相衝突。本章後面將介紹建立命名空間模式的規則和其他命名約定。

別名

創建模式命名空間創建模式命名空間

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

using alias = NamespaceName;

下面的例子(前面例子的修訂版本)給Wrox.ProCSharp.Basics命名空間指定別名Introduction,並使用這個別名實例化了一個NamespaceExample對象,這個對象是在該命名空間中定義的。它有一個方法GetNamespace(),該方法調用每個類都有的gettype()方法,以訪問表示類的類型的Type對象。下面使用這個對象來返回類的命名空間名:

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;
}
 }
}

補充

XML中使用命名空間的例子:

一,什麼是命名空間

命名空間是唯一標識XML文檔中的元素和實體的信息集合,通過特定URL關聯XML,解決命名衝突
。DTD不支持命名空間的所有功能。但XMLSchema支持。

二,命名空間的使用

1,聲明和使用命名空間

將前綴和URL關聯,使用xmls屬性定義命名空間別名。
語法:xmls:前綴名=“命名空間的URL”名字空間的前綴名可以是不包含冒號的任何合法XML名
稱。把同一命名空間的URL關聯到不同前綴是毫無意義的事情~!解析器並不解析URL真正的內
容,比方http://type.com和http://www.type.com指向同一頁面,解析器不會做檢查!
(1),在根元素中聲明命名空間例子:
(2),在元素中聲明命名空間
張三男
8890

2,屬性和命名空間

(1),屬性是屬於特定的元素,除非加前綴,否則屬性屬於他們的元素的命名空間。
(2),一個元素不可以具有相同名稱的屬性,但可以包含2個名稱相同但屬於不同命名空間的屬
性。

3,默認命名空間

可以為元素和其子元素指定一個默認的命名空間,使用沒有前綴的xmls屬性將默認空間附加給元
素和子元素。則默認元素及其子元素在默認空間中。屬性不在默認命名空間中,必須明確添加
前綴。即使擁有屬性的元素在某個命名空間中,沒有前綴的屬性也不在該命名空間中。
例子:假設type元素定義在http://type.com中,student元素定義在http://student.com中
teacher元素定義在http://teacher.com中。使用默認命名空間

相關搜尋

熱門詞條

聯絡我們