春節(jié)前有同志問import和assembly的區(qū)別,如果從字面上翻譯成中文,這兩個(gè)真的差不多。但是在.net 中他們兩個(gè)差別可不小,還有先后關(guān)系。 我認(rèn)為; .net的runtime主要幾部分就是1.各種jit,就是編譯器,編譯成中間代碼; 2.中間代碼管理,垃圾收集器等 3.運(yùn)行庫 runtime的運(yùn)行時(shí)庫好像一個(gè)pool,使用到的dll(namespace)都從中間(系統(tǒng)內(nèi)存)調(diào)用,不必再在系統(tǒng)中尋找、運(yùn)行dll,好像java的連接池,ejb的容器(差的多了些),存儲(chǔ)過程。因?yàn)椴皇谴蠖鄶?shù)程序不是需要所有framework的dll(namespace),從資源角度考慮,不需要將所有的dll(namespace)加入pool中。如果安裝framework,服務(wù)會(huì)在啟動(dòng)時(shí)自動(dòng)加入幾個(gè)namespace,也就是自動(dòng)assembly幾個(gè)的,如sql,lang,io等,但是象net等其他的namespace不會(huì)在開始加載這就要求你在編譯時(shí)說明,如果你用csc編譯的話,就需要指明其他的dll的位置的。用vs.net也是一樣,如果你打開每一個(gè)project樹的話,在assembly下會(huì)有系統(tǒng)自動(dòng)裝載的幾個(gè)namspace,如果程序中使用了其他的,就要手工添加了,不過不會(huì)讓你去找dll,可以直接選擇namspace。
只有系統(tǒng)已經(jīng)assembly了的namespace才能在程序中import,這就是告訴編譯器,你需要runtime庫中已經(jīng)裝載的namespace(類庫),這樣你提供類名(僅僅是類名)才能繼承,合成各個(gè)framework提供的類。如果你不import而是直接用,就要用類的全名,也就是namespace+classname
assembly就是告訴編譯器:我需要系統(tǒng)將某一個(gè)沒有默認(rèn)(自動(dòng))裝載的namespace裝載(運(yùn)行,在系統(tǒng)內(nèi)存中,池)
import就是告訴編譯器:我會(huì)用到已經(jīng)在池中的某個(gè)namespace,如果在程序中發(fā)現(xiàn)你(jit)不認(rèn)識(shí)的(沒有出現(xiàn)在我的程序中并且沒有完整名稱的)類時(shí),你就去這些庫中找吧。
|
溫馨提示:喜歡本站的話,請(qǐng)收藏一下本站!