0

语言:VB.NET 3.5

IL操作码:

    718 ldarg.0 
    719 callvirt    System.Windows.Forms.Button RClient.RClient::get_cmd1()
    724 ldarg.0 
    725 ldfld       System.String[] RClient.RClient::ButtonStrings
    730 ldc.i4.5    
    731 ldelem.ref  
    732 callvirt    System.Void System.Windows.Forms.ButtonBase::set_Text(System.String)
    737 ldarg.0 

对应:

Me.cmd1.Text = Me.ButtonStrings(5)

至少我相信确实如此。为了反映这一点,我必须对 IL 进行哪些更改:

Me.cmd1.Text = "some string"
4

1 回答 1

3
ldarg.0 
callvirt    System.Windows.Forms.Button RClient.RClient::get_cmd1()
ldstr      "some string"
callvirt    System.Void System.Windows.Forms.ButtonBase::set_Text(System.String)

第 1 行压Me入堆栈。第 2 行执行get_cmd1对应于cmd1堆栈顶部对象属性的 getter 的方法。因此,这一行将 getter 的结果cmd1从堆栈顶部的对象中压入,在此过程中弹出堆栈顶部。第 3 行将字符串压"some string"入堆栈。此时堆栈的顶部是字符串"some string",堆栈中的下一项是Me.cmd1. 第 4 行执行方法set_Text,字符串参数位于栈顶。这对应于Text堆栈中第二项的设置器。堆栈上的第二项是Me.cmd1。所以这些行等价于Me.cmd1.Text = "some string"

于 2010-02-03T02:15:14.493 回答