我正在使用Mono.Cecil编写一个小型的IL编织应用程序,这需要我在IL级别上操作目标程序集。
我的问题很简单,但我仍然觉得这件事很混乱。ldfld和ldflda指令之间的实际区别是什么?
我已经咨询过msdn,在ldfld获取字段的值时,ldflda获得字段的地址。好吧..。但这意味着什么呢?我最初认为前者用于值类型(和字符串),后者用于引用类型,但我编译了一个C#片段并在Reflector中检查了它,这证明我错了。
当C#编译器发布ldflda而不是ldfld时,我还没有找到任何不同的模式,而且我的搜索也没有发现任何可以解释这一点的文章。因此,何时使用ldflda而不是ldfld
任何帮助都将不胜感激。
发布于 2011-04-29 18:20:37
我猜它是用来做struct的:
struct Counter
{
public int i;
}
struct Something
{
public Counter c;
}
Something s;
s.c.i++;我非常肯定这里的c是按地址加载的,否则它会创建一个Counter副本。所以你不能用财产来做这件事。
发布于 2011-04-29 18:21:02
如果将字段作为ref参数传递给子例程,则应该会看到编译器为其发出一个ldflda,以便获得传入的引用。
https://stackoverflow.com/questions/5835747
复制相似问题