C# 表達(dá)式 名稱空間
在繼續(xù)學(xué)習(xí)前,應(yīng)花一定的時(shí)間了解一個(gè)比較重要的主題——名稱空間。它們是_NET中提供應(yīng)用程序代碼 容器的方式,這樣就可以唯一地標(biāo)識(shí)代碼及其內(nèi)容。名稱空間也用作.NETFramework中給項(xiàng)分類的一種方式。 大多數(shù)項(xiàng)都是類型定義。
默認(rèn)情況下,碼包含在全局名稱空間中。這意味著對(duì)于包含在這段代碼中的項(xiàng),全局名稱空間中的其 他代碼只要通過名稱進(jìn)行引用,就可以訪問它們??墒褂胣amespace關(guān)鍵字為花括號(hào)中的代碼塊顯式定義名稱 空間。如果在該名稱空間代碼的外部使用名稱空間中的名稱,就必須寫出該名稱空間中的限定名稱。
限定名稱包括它所有的分層信息。這意味著,如果一個(gè)名稱空間中的代碼需要使用在另—個(gè)名稱空間中定 義的名稱,就必須包括對(duì)該名稱空間的引用。限定名稱在不同的名稱空間級(jí)別之間使用句點(diǎn)字符(_),如下所示:
namespace LevelOne
{
// code in LevelOne namespace // name "NameOne*1 defined
}
IIcode in global namespace
這段代碼定義了一個(gè)名稱空間LevelOne,以及該名稱空間中的一個(gè)名稱NameOne(注意這里在應(yīng)該定義名 稱空間的地方添加了一個(gè)注釋,而沒有列出實(shí)際代碼,這是為了使我們的討論更具普遍性)。在名稱空間LevelOne 中編寫的代碼可以直接使用NameOne來引用該名稱,但全局名稱空間中的代碼必須使用限定名稱 LevelOne.NameOne來引用這個(gè)名稱。
需要注意特別重要的一點(diǎn):using語(yǔ)句本身不能訪問另一個(gè)名稱空間中的名稱。除非名稱空間中的代碼以某 種方式鏈接到項(xiàng)目上,或者代碼是在該項(xiàng)目的源文件中定義的,或者是在鏈接到該項(xiàng)目的其他代碼中定義的, 否則就不能訪問其中包含的名稱。另外,如果包含名稱空間的代碼鏈接到項(xiàng)目上,那么無(wú)論是否使用using,都 可以訪問其中包含的名稱。using語(yǔ)句便于我們?cè)L問這些名稱,減少代碼量,以及提高可讀性。
分析ConsoleApplicationl中的代碼,會(huì)看到下面這些被應(yīng)用到名稱空間上的代碼:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplicationl
以u(píng)sing關(guān)鍵字開頭的5行代碼聲明在這段C#代碼中使用System、System.Collections.Generic> System.Linq、 System.Text和System.Threading.Tasks名稱空間,它們可以在該文件的所有名稱空間中訪問,不必進(jìn)行限定。System 名稱空間是.NETFrameworic應(yīng)用程序的根名稱空間,包含控制臺(tái)應(yīng)用程序需要的所有基本功能。其他4個(gè)名稱 空間常用于控制臺(tái)應(yīng)用程序,所以該程序包含了它們。最后,為應(yīng)用程序代碼本身聲明一個(gè)名稱空間
ConsoleApplicationl。
C# 6新増了 using static關(guān)鍵字。這個(gè)關(guān)鍵字允許把靜態(tài)成員直接包含到C#程序的作用域中。例如,本章 的兩個(gè)示例都使用了 System.Console靜態(tài)類中的System.Console.WriteLineO方法。注意,在這些例子中,應(yīng)包 括Console類和WriteLineO方法。把using static System.Console添加到名稱空間列表中時(shí),訪問WriteLineO方法 就不再需要在前面加上靜態(tài)類名。
之后需要System .Console靜態(tài)類的所有代碼示例就包括using static System.Console關(guān)鍵字。
點(diǎn)擊加載更多評(píng)論>>