我正在使用Mono.Cecil编写一个小型IL编织应用程序,这需要我在IL级别上操作目标程序集.
我的问题很简单,但我仍然觉得这件事很混乱.这些ldfld和ldflda说明之间有什么实际区别?
我已经咨询了msdn,看来在ldfld获取字段的值时,ldflda获取字段的地址.好的......但是这意味着什么?我首先想到前者用于值类型(和字符串),后者用于引用类型,但我编译了一个C#片段并在Reflector中检查它,这证明我错了.
在C#编译器发出ldflda的时候ldfld,我找不到任何明显的模式,而我的搜索没有透露任何可以解释这一点的文章.那么何时使用ldflda而不是ldfld?
任何帮助将非常感谢.
我猜它用于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做到这一点.