2010-02-03 4 views
0

언어 : VB.NET 3.5IL 연산 코드 수정

IL의 옵 코드는 :

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

가 적어도 내가이하는 생각 :

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 

는에 해당합니다. IL을 변경 내가 만들어야 할 것입니다 무엇 대신이를 반영하기 :

Me.cmd1.Text = "some string" 
+1

* 항상 * 코드를 먼저 작성한 다음 Ildasm.exe를 사용하여 VB 컴파일러에서 생성 된 IL을 확인하십시오. –

답변

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 행은 스택 상단의 객체에 대해 cmd1 속성의 getter에 해당하는 get_cmd1 메서드를 실행합니다. 따라서이 줄은 getter의 결과를 스택 맨 위에있는 객체에서 푸시하여 프로세스의 스택 맨을 터뜨립니다. 3 행은 스택에 "some string" 문자열을 푸시합니다. 이 시점에서 스택의 상단은 "some string" 문자열이고 스택의 다음 항목은 Me.cmd1입니다. 4 행은 문자열 매개 변수가 스택 맨 위에있는 방법 set_Text을 실행합니다. 이는 스택의 두 번째 항목에 대한 Text의 설정 자에 해당합니다. 스택의 두 번째 항목은 Me.cmd1입니다. 따라서이 행은 Me.cmd1.Text = "some string"과 같습니다.