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したがって、この行cmd1は、スタックの一番上にあるオブジェクトからゲッターの結果をプッシュし、プロセスでスタックの一番上をポップします。"some string"3行目は、文字列をスタックにプッシュします。この時点で、スタックの最上位は文字列"some string"であり、スタックの次の項目はですMe.cmd1set_Text4行目は、文字列パラメーターをスタックの最上位にしてメソッドを実行します。Textこれは、スタックの2番目のアイテムのセッターに対応します。スタックの2番目の項目はですMe.cmd1。したがって、これらの行は。と同等Me.cmd1.Text = "some string"です。

于 2010-02-03T02:15:14.493 に答える