|
|
|
|
|
在本文中,將介紹 C# 命名空間,教你如何使用“using”指令,以及教你如何使用“別名”指令等。
如何定義命名空間
命名空間在管理 C# 中的相關(guān)類方面起著重要作用。.NET Framework 使用命名空間來(lái)組織其內(nèi)置類。例如.NET中有一些內(nèi)置的命名空間,如System、System.Linq、System.Web等,每個(gè)命名空間都包含相關(guān)的類。
命名空間定義以關(guān)鍵字命名空間開(kāi)頭,后跟命名空間名稱,如下所示 :
namespace namespace_name {
// code declarations
}
要調(diào)用函數(shù)或變量的啟用命名空間的版本,請(qǐng)?jiān)诿臻g名稱前添加如下:
namespace_name.item_name;
以下程序演示了名稱空間的使用
using System;
namespace first_space {
class namespace_cl {
public void func() {
Console.WriteLine("Inside first_space");
}
}
}
namespace second_space {
class namespace_cl {
public void func() {
Console.WriteLine("Inside second_space");
}
}
}
class TestClass {
static void Main(string[] args) {
first_space.namespace_cl fc = new first_space.namespace_cl();
second_space.namespace_cl sc = new second_space.namespace_cl();
fc.func();
sc.func();
Console.ReadKey();
}
}
編譯并執(zhí)行上述代碼時(shí),會(huì)產(chǎn)生以下結(jié)果
Inside first_space
Inside second_space
如何使用“using”指令
using關(guān)鍵字聲明程序正在使用給定名稱空間中的名稱。例如,我們?cè)诔绦蛑惺褂?strong>System命名空間,類 Console 在那里定義,我們只需寫:
Console.WriteLine ("Hello there");
我們可以將完全限定名稱寫為
System.Console.WriteLine("Hello there");
你還可以避免使用using namespace
指令在名稱空間前添加。該指令告訴編譯器后續(xù)代碼正在使用指定命名空間中的名稱。因此,命名空間隱含在以下代碼中。
下面我們用 using 指令重寫前面的例子。
using System;
using first_space;
using second_space;
namespace first_space {
class abc {
public void func() {
Console.WriteLine("Inside first_space");
}
}
}
namespace second_space {
class efg {
public void func() {
Console.WriteLine("Inside second_space");
}
}
}
class TestClass {
static void Main(string[] args) {
abc fc = new abc();
efg sc = new efg();
fc.func();
sc.func();
Console.ReadKey();
}
}
編譯并執(zhí)行上述代碼時(shí),會(huì)產(chǎn)生以下結(jié)果。
Inside first_space
Inside second_space
下面一個(gè)例子,我們將編寫一個(gè)使用 Hello 類的控制臺(tái)應(yīng)用程序,我們可以只使用 class-arun.CSharp.Namespaces.Hello
的完全限定名稱,但這個(gè)名稱非常長(zhǎng)且笨拙。一種更簡(jiǎn)單的方法是使用“using”指令,這使得無(wú)需限定即可使用名稱空間中的所有類型。如果你想在不鍵入完全限定名稱的情況下調(diào)用方法,你可以實(shí)現(xiàn)“using”指令。
using sysem;
using arun.CSharp.Namespaces;
class Hello {
static void Main() {
Hello m = new Hello();
System.Console.WriteLine(m.GetMessage());
}
}
“using System
”允許你鍵入“System
”命名空間成員的方法名稱,而無(wú)需每次都鍵入“System
”一詞。在 Hello()
類中,“Console
”是“System
”命名空間的類成員,方法是“WriteLine
”。它的完全限定名稱是“System.Console.WriteLine(...)
”。
請(qǐng)注意,兩次出現(xiàn)的 Hello 是 arun.CSharp.Namespaces.Hello
的簡(jiǎn)寫。
如何使用別名指令
C# 還支持別名的定義和使用。在兩個(gè)庫(kù)之間發(fā)生名稱沖突的情況下,或者在使用來(lái)自更大名稱空間的少量類型時(shí),此類別名可能很有用。
using-alias-directive 引入了一個(gè)標(biāo)識(shí)符,作為緊鄰的編譯單元或命名空間主體中的命名空間或類型的別名。
using identifier = namespace-or-type-name ;
在包含 using-alias-directive 的編譯單元或命名空間主體中的成員聲明中,using-alias-directive 引入的標(biāo)識(shí)符可用于引用給定的命名空間或類型。
例如
namespace N1.N2 {
class A {}
}
namespace N3 {
using A = N1.N2.A;
class B: A {}
}
這里,在 N3 命名空間的成員聲明中,A 是 N1.N2.A 的別名,因此類 N3.B 派生自類 N1.N2.A。為N1.N2創(chuàng)建一個(gè)別名R,然后引用RA,也可以獲得相同的效果。
namespace N3 {
using R = N1.N2;
class B: R.A {}
}
using-alias-directive 的標(biāo)識(shí)符在直接包含 using-alias-directive 的編譯單元或命名空間的聲明空間內(nèi)必須是唯一的。
如何嵌套命名空間
你可以在另一個(gè)命名空間內(nèi)定義一個(gè)命名空間,如下所示。
namespace namespace_name1 {
// code declarations
namespace namespace_name2 {
// code declarations
}
}
你可以使用點(diǎn) (.) 運(yùn)算符訪問(wèn)嵌套命名空間的成員,如下所示。
using System;
using first_space;
using first_space.second_space;
namespace first_space {
class abc {
public void func() {
Console.WriteLine("Inside first_space");
}
}
namespace second_space {
class efg {
public void func() {
Console.WriteLine("Inside second_space");
}
}
}
}
class TestClass {
static void Main(string[] args) {
abc fc = new abc();
efg sc = new efg();
fc.func();
sc.func();
Console.ReadKey();
}
}
編譯并執(zhí)行上述代碼時(shí),會(huì)產(chǎn)生以下結(jié)果。
Inside first_space
Inside second_space
總結(jié)
本文通過(guò)示例介紹了C#命名空間的一些基礎(chǔ)知識(shí),它可以幫助你更加了解C#的命名空間的含義及使用。
相關(guān)文章