【发布时间】:2019-06-15 21:02:12
【问题描述】:
我很困惑这个汇编代码是如何工作的。我试图四处寻找答案,但找不到任何东西。我认为 ldarg.0 是由于实例无效而加载的,但我不确定它为什么加载 ldarg.1。
如果有人能解释发生了什么,我将不胜感激。
.method public hidebysig specialname instance void set_phase(string value)
{
.maxstack 3
.locals init (bool V0)
nop
ldarg.1
ldarg.0
ldfld string KGER.Generate::_phase
call bool [mscorlib]System.String::op_Inequality(string, string)
ldc.i4.0
ceq
stloc.0
ldloc.0
brtrue.s loc_4E8
提前致谢!
【问题讨论】:
-
ldarg.0加载this指针,然后ldfld将其替换为this._phase的值。代码基本上是在做if (value != this._phase) -
instance是关键,实例方法总是有一个额外的参数,它不是方法声明的一部分。它是第一个,它传递对象引用。又名this。静态方法没有那个参数。与扩展方法的语法进行比较。
标签: .net-assembly cil