MSIL實用指南 struct的生成和操作

2022-01-24 14:46:45 字數 1511 閱讀 4609

一、宣告struct

和宣告class一樣,用modulebuilder的definetype方法,但是要求第二個引數是typeattributes.sealed,第三個引數是typeof(valuetype)。

例項:var typebuilder = modulebuilder.definetype(

"mystruct,

typeattributes.public ,

typeof(valuetype)

);二、操作字段、方法、屬性

這些和在class生成各成員一致。

三、struct作為引數的相關操作

1.載入struct

和一般載入引數一致,用ldarg_x類指令

2.載入struct的字段

用ldarga或ldarga_s指令把引數位址載入到棧上,再用ldfld指令載入字段。

ldarga_s是ldarga的短格式指令

3.儲存到struct的字段

用ldarga或ldarga_s指令把引數位址載入到棧上,再用sdfld指令載入字段。

4.呼叫struct的方法

用ldarga或ldarga_s指令把引數位址載入到棧上,再用call類指令呼叫方法。

5.儲存struct

和一般儲存引數一致,用starg_x類指令

四、struct作為區域性變數的相關操作

1.載入struct

和一般載入區域性變數一致,用ldloc_x類指令

2.載入struct的字段

用ldloca或ldloca_s指令把引數位址載入到棧上,再用ldfld指令載入字段。

ldloca_s是ldloca的短格式指令

3.儲存到struct的字段

用ldloca或ldloca_s指令把引數位址載入到棧上,再用sdfld指令載入字段。

4.呼叫struct的方法

用ldloca或ldloca_s指令把引數位址載入到棧上,再用call類指令呼叫方法。

5.儲存struct

和一般儲存區域性變數一致,用stloc_x類指令

四、struct作為欄位的相關操作

1.載入struct

和一般載入字段一致,先生成載入this,再用ldfld類指令

2.載入struct的字段

先生成載入this,再用ldflda指令把載入這個struct欄位位址,再用ldfld指令載入字段。

ldflda_s是ldflda的短格式指令

3.儲存到struct的字段

先生成載入this,再用ldflda指令把struct欄位位址載入到棧上,再用sdfld指令載入字段。

4.呼叫struct的方法

先生成載入this,再用ldflda指令把struct欄位位址載入到棧上,再用call類指令呼叫方法。

5.儲存struct

和一般儲存字段一致,用stfld類指令

MSIL實用指南 生成foreach語句

foreach可以迭代陣列或者乙個集合物件。foreach語句格式是 它的生成步驟是 foreach 成員 in 集合 迴圈體 一 宣告三個變數,local0呼叫get current結果,local1儲存集合物件的呼叫getenumerator結果,local2呼叫movenext結果。二 宣告四...

DHTML實用指南

改進checkbox 單擊我可以改變 checkbox的狀態 使用label實現快捷鍵的功能 姓名 n 文字框的提示和輸入 開啟和關閉乙個新的視窗 開啟我的 關閉我的 陣列中的方法 join 是將陣列轉換成字串,括號裡的字段是指定的分隔符 sort 是排序 array1 new array a b ...

DHTML實用指南

改進checkbox 單擊我可以改變 checkbox的狀態 使用label實現快捷鍵的功能 姓名 n 文字框的提示和輸入 開啟和關閉乙個新的視窗 開啟我的 關閉我的 陣列中的方法 join 是將陣列轉換成字串,括號裡的字段是指定的分隔符 sort 是排序 array1 new array a b ...