春節前有同志問import和assembly的區別,如果從字面上翻譯成中文,這兩個真的差不多。但是在.net 中他們兩個差別可不小,還有先后關系。 我認為; .net的runtime主要幾部分就是1.各種jit,就是編譯器,編譯成中間代碼; 2.中間代碼管理,垃圾收集器等 3.運行庫 runtime的運行時庫好像一個pool,使用到的dll(namespace)都從中間(系統內存)調用,不必再在系統中尋找、運行dll,好像java的連接池,ejb的容器(差的多了些),存儲過程。因為不是大多數程序不是需要所有framework的dll(namespace),從資源角度考慮,不需要將所有的dll(namespace)加入pool中。如果安裝framework,服務會在啟動時自動加入幾個namespace,也就是自動assembly幾個的,如sql,lang,io等,但是象net等其他的namespace不會在開始加載這就要求你在編譯時說明,如果你用csc編譯的話,就需要指明其他的dll的位置的。用vs.net也是一樣,如果你打開每一個project樹的話,在assembly下會有系統自動裝載的幾個namspace,如果程序中使用了其他的,就要手工添加了,不過不會讓你去找dll,可以直接選擇namspace。
只有系統已經assembly了的namespace才能在程序中import,這就是告訴編譯器,你需要runtime庫中已經裝載的namespace(類庫),這樣你提供類名(僅僅是類名)才能繼承,合成各個framework提供的類。如果你不import而是直接用,就要用類的全名,也就是namespace+classname
assembly就是告訴編譯器:我需要系統將某一個沒有默認(自動)裝載的namespace裝載(運行,在系統內存中,池)
import就是告訴編譯器:我會用到已經在池中的某個namespace,如果在程序中發現你(jit)不認識的(沒有出現在我的程序中并且沒有完整名稱的)類時,你就去這些庫中找吧。
|