IL:ldfld vs ldflda

Shd*_*dNx 7 .net c# il

我正在使用Mono.Cecil编写一个小型IL编织应用程序,这需要我在IL级别上操作目标程序集.

我的问题很简单,但我仍然觉得这件事很混乱.这些ldfldldflda说明之间有什么实际区别?

我已经咨询了msdn,看来在ldfld获取字段的值时,ldflda获取字段的地址.好的......但是这意味着什么?我首先想到前者用于值类型(和字符串),后者用于引用类型,但我编译了一个C#片段并在Reflector中检查它,这证明我错了.

在C#编译器发出ldflda的时候ldfld,我找不到任何明显的模式,而我的搜索没有透露任何可以解释这一点的文章.那么何时使用ldflda而不是ldfld

任何帮助将非常感谢.

And*_*rey 7

我猜它用于structures:

struct Counter
{
   public int i;
}

struct Something
{
   public Counter c;
}

Something s;
s.c.i++;
Run Code Online (Sandbox Code Playgroud)

我很确定c这里是由地址加载,否则它会创建一个副本Counter.这就是为什么你不能用propery做到这一点.

  • +1你是对的.另见http://blogs.msdn.com/b/ericlippert/archive/2011/03/29/compound-assignment-part-one.aspx (3认同)