C#第6課:C#的名稱空間
發(fā)表時(shí)間:2024-06-18 來源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]本節(jié)課將介紹C#的名稱空間。其目的是: 1.了解什么是名稱空間。 2.了解如何實(shí)現(xiàn)"using"指示符。 3.了解"alias" 指示符的用法。 4.了解名稱空間的成員的內(nèi)容。 在第一課中,你已經(jīng)在簡單的hello程序中看到了"using Syst...
本節(jié)課將介紹C#的名稱空間。其目的是:
1.了解什么是名稱空間。
2.了解如何實(shí)現(xiàn)"using"指示符。
3.了解"alias" 指示符的用法。
4.了解名稱空間的成員的內(nèi)容。
在第一課中,你已經(jīng)在簡單的hello程序中看到了"using System;"指示符的使用。該指示符可以讓你使用System名稱空間中的成員。在第一課中,未及對(duì)此作出詳細(xì)介紹,現(xiàn)在我們來解釋一下名稱空間的具體用法。一旦學(xué)完了本節(jié)課,你將了解"using"指示符及其相關(guān)內(nèi)容。
作為C#的元素,名稱空間可以用來幫助組織程序的結(jié)構(gòu),可以避免兩套代碼集中命名的沖突。在程序代碼中,使用名稱空間是個(gè)良好的編程習(xí)慣,因?yàn)檫@有助于重用你的程序代碼。
1.清單6-1. The C# Station Namespace: NamespaceCSS.cs
// Namespace Declaration
using System;
// The C# Station Namespace
namespace csharp_station {
// Program start class
class NamespaceCSS {
// Main begins program execution.
public static void Main() {
// Write to console
Console.WriteLine("This is the new C# Station Namespace.");
}
}
}
說明
清單6-1演示了如何創(chuàng)建一個(gè)名稱空間。把單詞"namespace"放在"csharp_station"之前,就創(chuàng)建了一個(gè)名稱空間。"csharp_station"名稱空間內(nèi)的大括號(hào)中包含了成員。
2.清單6-2 Nested Namespace 1: NestedNamespace1.cs
// Namespace Declaration
using System;
// The C# Station Tutorial Namespace
namespace csharp_station {
namespace tutorial {
// Program start class
class NamespaceCSS {
// Main begins program execution.
public static void Main() {
// Write to console
Console.WriteLine("This is the new C#
Station Tutorial Namespace.");
}
}
}
}
說明
名稱空間可以建立一個(gè)代碼的組織結(jié)構(gòu)。一個(gè)良好的編程習(xí)慣是:用層次模式來組織你的名稱空間。你可以把通用一些的名稱放在最頂層,里層則放置一些專用一些的名稱。這個(gè)層次系統(tǒng)可以用嵌套的名稱空間表示。清單6-2演示了如何建立一個(gè)嵌套的名稱空間。在不同的子名稱空間內(nèi)放置代碼,從而組織好你的代碼的結(jié)構(gòu)。
3.清單6-3. Nested Namespace 2: NestedNamespace2.cs
// Namespace Declaration
using System;
// The C# Station Tutorial Namespace
namespace csharp_station.tutorial {
// Program start class
class NamespaceCSS {
// Main begins program execution.
public static void Main() {
// Write to console
Console.WriteLine("This is the new C# Station Tutorial Namespace.");
}
}
}
說明
清單6-3演示了另外一種編寫嵌套的名稱空間的方法。在"csharp_station"和"tutorial"之間置入點(diǎn)運(yùn)算符,表明這是嵌套的名稱空間。結(jié)果同清單6-2。 相比而言,清單6-3 更易書寫。
4.清單6-4. Calling Namespace Members: NamespaceCall.cs
// Namespace Declaration
using System;
namespace csharp_station {
// nested namespace
namespace tutorial {
class myExample1 {
public static void myPrint1() {
Console.WriteLine("First Example of calling another namespace member.");
}
}
}
// Program start class
class NamespaceCalling {
// Main begins program execution.
public static void Main() {
// Write to console
tutorial.myExample1.myPrint1();
csharp_station.tutorial.myExample2.myPrint2();
}
}
}
// same namespace as nested namespace above
namespace csharp_station.tutorial {
class myExample2 {
public static void myPrint2() {
Console.WriteLine("Second Example of calling another namespace member.");
}
}
}
說明
1.清單6-4 的例子演示了用完整的名稱指示,調(diào)用名稱空間的成員。
一個(gè)完整的名稱指示包括名稱空間名,以及調(diào)用的方法名。程序的上半部分,在"csharp-station"名稱空間內(nèi)嵌套的名稱空間"tutorial"中,定義了類"myExample1"及其方法"myPrint1"。 Main()方法中用完整的名稱指示:"tutorial.myExample1.myPrint()" 來進(jìn)行調(diào)用。 因?yàn)镸ain()方法和tutorial名稱空間位于同一名稱空間內(nèi),如果使用"csharp_station"的全稱不是必需的。
2.清單6-4的下半部分,也是名稱空間"csharp_station.tutorial"的一部分。
類"myExample1"和"myExample2"都屬于該名稱空間。另外,也可以把它們分別寫入不同的文件,同時(shí)它們?nèi)匀粚儆谕幻Q空間。在Main()方法中,調(diào)用"myPrint2"方法時(shí),采用了全稱:"csharp_station.tutorial.myExample2.myPrint2()"。 在這里,必須使用全稱中"csharp_station",因?yàn)?quot;myExample2"定義在外部。
3.注意:這里對(duì)兩個(gè)不同的類起了不同的名字:
"myExample1"和"myExample2"這是因?yàn)閷?duì)于每個(gè)名稱空間來說,其中的成員必須有唯一的名稱。 記住:它們都處于同一名稱空間中,不能取名相同。方法"myPrint1"和"myPrint2" 名稱的不同僅僅是為了方便起見,即使同名也沒有問題,因?yàn)樗鼈儗儆诓煌念悺?
5.清單6-5. The using Directive: UsingDirective.cs
// Namespace Declaration
using System;
using csharp_station.tutorial;
// Program start class
class
UsingDirective {
// Main begins program execution.
public static void Main() {
// Call namespace member
myExample.myPrint();
}
}
// C# Station Tutorial Namespace
namespace csharp_station.tutorial {
class myExample {
public static void myPrint() {
Console.WriteLine("Example of using a using directive.");
}
}
說明
調(diào)用方法時(shí),如果你不想打入全稱,可使用"using"指示符。在清單6-5中,有兩個(gè)"using"指示符。第一個(gè)指示符是"using System",同本教程其它地方出現(xiàn)的"using"指示符相同。你不需要每次都打上"System",只需要打入該名稱空間的成員方法名即可。在myPrint()中,"Console"是個(gè)"System"名稱空間中的成員類,該類有個(gè)"WriteLine"的方法。該方法的全稱是: "System.Console.WriteLine(...)"。
類似地,using指示符"using csharp_station.tutorial"可以讓我們?cè)谑褂?"csharp_station.tutorial" 名稱空間的成員時(shí),無需打入全稱。所以,我們可以打入"myExample.myPrint()"。如果不使用"using"指示符,每次實(shí)現(xiàn)該方法時(shí),我們就得打入"csharp_station.tutorial.myExample.myPrint()" 。
6.清單6-6. The Alias Directive: AliasDirective.cs
// Namespace Declaration
using System;
using csTut = csharp_station.tutorial.myExample; // alias
// Program start class
class AliasDirective {
// Main begins program execution.
public static void Main() {
// Call namespace member
csTut.myPrint();
myPrint();
}
// Potentially ambiguous method.
static void myPrint() {
Console.WriteLine("Not a member of
csharp_station.tutorial.myExample.");
}
}
// C# Station Tutorial Namespace
namespace csharp_station.tutorial {
class myExample {
public static void myPrint() {
Console.WriteLine("This is a member of csharp_station.tutorial.myExample.");
}
}
}
說明
1.有時(shí),往往遇到取名較長的名稱空間,而你可以把該名稱變短些。
這樣就增強(qiáng)了可讀性,還避免了同名的沖突。清單6-6 演示了如何使用別名指示符,創(chuàng)建別名的格式例子是:"using csTut = csharp_station.tutorial.myExample"。表達(dá)式"csTut"可以取代"csharp_station.tutorial.myExample",用在本文件的任何地方。在Main()方法中就使用了"csTut"。
2.在Main()方法中,調(diào)用了"AliasDirective" 類中"myPrint" 方法。
這與"myExample" 類的"myPrint"方法同名。 雖然同名,這兩個(gè)方法都各自正確地進(jìn)行了調(diào)用,原因是:"myExample"類的"myPrint"方法用別名"csTut"表示。編譯器能夠準(zhǔn)確地了解所要執(zhí)行的是哪個(gè)方法。一旦漏掉了"csTut",編譯器將兩次調(diào)用"AliasDirective"類的"myPrint"方法。
3.另外一方面,如果我們沒有創(chuàng)建別名指示符,而是添加了"using csharp_station.tutorial.myExample"之后,再調(diào)用myPrint(),編譯器就會(huì)生成出錯(cuò)信息,因?yàn)樗恢谰烤故钦{(diào)用. "csharp_station.tutorial.myExample.myPrint()"方法呢?還是去調(diào)用"AliasDirective.myPrint()"方法。所以使用名稱空間是良好的編程習(xí)慣,可避免代碼中的沖突現(xiàn)象。
小結(jié)
到現(xiàn)在為止,我們已經(jīng)了解在名稱空間中可以使用類,實(shí)際上,名稱空間可以使用如下類型的數(shù)據(jù):
類;結(jié)構(gòu);接口;枚舉;代理
在后面的課程中我們將詳細(xì)介紹這些數(shù)據(jù)類型。
概括來講,你已經(jīng)了解了什么是名稱空間,如何定義自己的名稱空間。如果你不想打入全稱,可以使用"using"指示符。一旦你想縮短名稱空間的長名,可以使用別名指示符。另外,除了類之外,你也了解了名稱空間可以使用的其他一些數(shù)據(jù)類型。