託管代碼的編繹和執行

編譯託管代碼
編譯以任何語言編寫的託管代碼將生成 MSIL 以及描述該 MSIL 的元數據。
1.Microsoft 中間語言
2.元數據
3.屬性

一些 MSIL 指令示例及其用途:
1.add:將堆棧上最上面的兩個值相加,然後將結果壓回堆棧。
2.box:將值類型轉換爲引用類型;即,將值裝箱。
3.br:將控制(分支)轉移到內存中的指定位置。
4.call:調用指定的方法。
5.ldfld:將對象的指定字段加載到堆棧上。
6.ldobj:將指定值類型的值複製到堆棧上。
7.newobj:創建新對象或值類型的新實例。
8.stfld:將一個值從堆棧複製到對象的指定字段中。
9.stobj:將堆棧上的某個值複製爲指定的值類型。
10.unbox:將裝箱值反向轉換爲其原始形式。

元數據描述模塊中包含的類型。 它爲類型所存儲的信息包括:
1.類型名稱
2.類型可見性,可以是公共的或程序集
3.此類型繼承自哪個類型(如果存在)
4.該類型所實現的任何接口
5.該類型所實現的任何方法
6.該類型所公開的任何屬性
7.該類型提供的任何事件

屬性
1.屬性是存儲在元數據中的值,可以使用屬性來控制代碼執行方式的各個方面,它與System.Attribute類相對應
2.屬性(attribute)可添加到類型(如類)中以及這些類型的字段、方法和屬性(property)中。

程序集清單所包含的內容如下:
1.程序集的名稱。
2.程序集的版本號 。
3.程序集的區域性,指示程序集所支持的文化或語言 。
4.此程序集中所包含的所有文件的列表,同時附有根據這些文件計算出的哈希值 。 
5.此程序集所依賴的其他程序集以及這些依賴程序集每一個的版本號 。
6.一個程序集通常只是單個 DLL,但是它也可以包含多個文件。

分類程序集的方法多種多樣。
方法一:  1.靜態程序集        2.動態程序集
方法二:  根據命名方式來劃分
注:任何程序集的完整命名需要指定三項: 程序集的名稱、程序集的版本號以及程序集所支持的區域性 。

執行託管代碼
1.加載程序集
2.編譯 MSIL
3.垃圾回收
4.終結器
5.應用程序域

編譯 MSIL
首次調用 Z 類的方法 1 時,將調用 JIT 編譯器以將該方法的 MSIL 轉換成本機代碼 。

終結器
1.堆上的每個對象都有一個稱爲終結器的特殊方法。
2.終結器與 C++ 之類的語言中所提供的析構函數不是一個概念 。
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章