Модификация IL-кода - PullRequest
       20

Модификация IL-кода

0 голосов
/ 03 февраля 2010

Язык: 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"

1 Ответ

3 голосов
/ 03 февраля 2010
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 для объекта на вершине стека. Таким образом, эта строка выталкивает результат получения cmd1 из объекта на вершине стека, выталкивая вершину стека в процессе. Строка 3 помещает строку "some string" в стек. В этот момент вершина стека является строкой "some string", а следующий элемент в стеке - Me.cmd1. Строка 4 выполняет метод set_Text со строковым параметром, являющимся вершиной стека. Это соответствует установщику для Text для второго элемента в стеке. Второй элемент в стеке - Me.cmd1. Таким образом, эти строки эквивалентны Me.cmd1.Text = "some string".

...