语言: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"
答案 0 :(得分: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
的setter。堆栈中的第二项是Me.cmd1
。所以这些行等同于Me.cmd1.Text = "some string"
。