C#中的Namespace詳解
我現(xiàn)在感到學(xué)好C#就是就是要知道C#的基本語法,C#的新的特點(diǎn),C#能干什么!
其中我感到不管如何,NAMESPACE都是很關(guān)鍵的。可以說不是只對C#而言,而是整個.NET都是由NAMESPACE組成的。所以我在看了C#的基本語法后,就直奔NAMESPACE來了,在這里寫下自己的一些感覺,希望能對后面學(xué)習(xí)的人有所幫助。
NAMESPACE在新的.NET環(huán)境下編程可以說是無所不在??傊o我的感覺就是MS的新一代的語言的核心就是NAMESPACE,我們可以通過已經(jīng)有的NAMESPACE,做我們想做的和愿意做的。當(dāng)然如果你感覺現(xiàn)有的還不夠你使用的話,你也可以自己來使用現(xiàn)有的來擴(kuò)展,創(chuàng)建自己的NAMESPACE!(感覺怎么很象以前的COM、DCOM呢?)
如何建立一個NAMESPACE
定義一個NAMESPACE首先需要包含關(guān)鍵詞:namespace
格式如下:
namespace Your_nsname { //namespase主體內(nèi)容; } |
呵呵,給我的感覺就好象和Class或Struct一樣。不過它們除了形式有類似外,確實(shí)在很多方面都不相同。
在一個NAMESPACE的主體內(nèi),可以引用其他的NAMESPACE,例如:
namespace Your_nsname{ //下面引用System和System.Xml著兩個NAMESPACE; using System; using System.Xml; //namespase主體內(nèi)容; } |
在上面有一個需要注意的就是,如果要引用NAMESPACE的話,那么應(yīng)該在申明其它類型前引用,如下是錯誤的:
namespace Your_nsname{ //其它一些內(nèi)容; //由于引用System和System.Xml放到了其它語句之后,所以。。。 using System; using System.Xml; } |
另外對于NAMESPACE還有一個有趣的地方,我們先看一下下面的的兩個方式:
方式一:
namespace N1.N2 { class A {} class B {} } |
方式二:
namespace N1 { namespace N2 { class A {} class B {} } } |
在上面的兩種方式中,第二種很容易就能看懂,是在NAMESPACE N1中再創(chuàng)建一個NAMESPACE N2,而N2中有兩個類(class)A、B。那么***種呢?其實(shí)上面兩個方式定義的其實(shí)是一模一樣的。NAMESPACE是可以嵌套定義的,我們可以使用第二種方式,層次感覺比較清楚,也可以使用***種方式。所不同的是,***中方式中,在N1和N2之間必須用分隔符“.”來表明他們兩者之間的層次關(guān)系!
#p#
在使用的時候用如下的方式:
N1.N2.A;
N1.N2.B;
在一個NAMESPACE中,我們也可以用一個別名指代現(xiàn)有的NAMESPACE或是一些其他類型數(shù)據(jù)。
別名的使用格式如下:
using 別名 = 一個已經(jīng)存在的類型;
例如:using soholife = System;
下面我們通過幾個例子來加深一下理解:
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。同樣的我們也可以用下面的方式來取得同樣的效果:
namespace N3 { using R = N1.N2; class B: R.A {} } |
說到這里,我想提個問題,先看下面的例子:
namespace N1.N2 { class A {} } namespace N3 { class A {} } namespace N3 { using A = N1.N2.A; } |
如果我們這樣寫,會有問題嗎?
答案當(dāng)然是肯定的了!因?yàn)橐粋€別名必須是在NAMESPACE中***的,而上面由于已經(jīng)有了class a{},我們在用using A =N1.NE.A;就肯定要出錯了!
不過如果我們改成:using B =N1.N2.A;那么結(jié)果如何呢?朋友門自己想想吧!我就不多說了!
我們再來看看下面這個例子:
namespace N1.N2 { class A {} } namespace N3 { using R = N1.N2; } namespace N3 { class B: R.A {} } |
上面的例子中,不知道大家覺得是否正確。
實(shí)際上這個是錯誤的!原來在一個分開的單元中使用別名的時候,別名只是在它所在的單元中(NAMESPACE或其它)可以使用,而在其他單元中是不能夠用的,所以上面的那個例子中,在第二個N3中使用R的時候,會提示R未知!當(dāng)然了,如果我們想使用這樣的方式,我們還是有辦法的,就是把別名R寫到N3的外面,如下:
using R = N1.N2; namespace N3 { class B: R.A {} } |
如果上面的文章能全部理解的話,我想你應(yīng)該能對NAMESPACE有一些概念了!如果能這樣的話,我的目的也達(dá)到了!
【編輯推薦】