天天看點

委托和事件(1)——程式集附加:

1. 程式集(Assembly),可以看做是一堆相關類打一個包,相當于java中的jar包。打包的目的:程式中隻引用必須的程式集,減小程式的尺寸;一些程式集内部的類不想讓其他程式集調用。

2. 我們調用的類都是位于各個程式集中,如果調用的類在沒有引用的程式集中,則需要添加對那個程式集的引用,比如ConfigurationManager。

3. 通路級别:private(本類内部才能調用)、public(所有人都能調用)、protected(隻有子類才能調用)。

4. 類如果不标注通路級别則是internal級别,也就是隻能在程式集内部通路,如果想跨程式集通路,則需要public或者使用InternalsVisibleTo 。

5. 還可以編寫自己的程式集,建立→類庫,使用這個類庫的程式隻要引用生成的dll即可,如果是引用同一個解決方案中類庫,則最好添加項目引用。項目不能循環引用,就是A引用B,B又引用A。

6. exe、dll都是程式集,隻不過exe有入口而已,exe也可以被添加引用。dll不一定是程式集(VC寫的dll就不是程式集),程式集不一定是dll(.net寫的EXE也是程式集)。EXE也不一定是程式集(VC寫的EXE就不是程式集)。托管(Managed)代碼(MSIL)。非托管。

7. GAC(全局程式集),數字簽名(防止引用的程式集被篡改)。

附加:

1. internal修飾的有可能是類,有可能是方法,有可能是屬性。(通路級别是本程式集才能通路)。

2. 類如果沒有标記public或者internal,則預設是internal 。

3. 一個解決方案下的兩個或多個項目之間的調用就可以通過引用程式集來實作。當然微軟更推薦直接通過添加引用來實作。也可以通過添加項目來實作。

但是隻能單向引用,不能雙向引用。比如:項目A調用項目B,這是正确的。項目A調用項目B,項目B調用項目A,這是錯誤的。項目A調用項目B,項目B調用項目C,項目C調用項目A,這也是錯誤的。不能循環依賴。

但是不能調用程式集中 internal 修飾的類。比如一個程式集中有多個類,有的類是public修飾,有的類是internal修飾,這時候引用這個程式集以後,隻能調用其中public修飾的類,而internal修飾的類不能調用。

4. 判斷是否是程式集的方法:

方法一:用反編譯工具,看看是否可以反編譯,能被反編譯的就是程式集,不能被反編譯的就不是程式集。

方法二:看.NET能否将其添加到引用。如:用vs開發工具添加引用,能被添加到引用的就是程式集,不能被添加到引用的就不是程式集。

5. 托管代碼:咱們平時寫的.NET代碼是可以反編譯出來的,都是托管代碼。

非托管代碼:編譯成普通的機器碼。

6. GAC:global assembly cache 全局程式集緩存。

7. 兩個解決方案之間也可以調用程式集。程式集相當于類庫,隻要引用了就能調用。

繼續閱讀