一、宣告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 ...