首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IL: ldfld对ldflda

IL: ldfld对ldflda
EN

Stack Overflow用户
提问于 2011-04-29 18:16:02
回答 2查看 3.1K关注 0票数 8

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

我的问题很简单,但我仍然觉得这件事很混乱。ldfldldflda指令之间的实际区别是什么?

我已经咨询过msdn,在ldfld获取字段的值时,ldflda获得字段的地址。好吧..。但这意味着什么呢?我最初认为前者用于值类型(和字符串),后者用于引用类型,但我编译了一个C#片段并在Reflector中检查了它,这证明我错了。

当C#编译器发布ldflda而不是ldfld时,我还没有找到任何不同的模式,而且我的搜索也没有发现任何可以解释这一点的文章。因此,何时使用ldflda而不是ldfld

任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-04-29 18:20:37

我猜它是用来做struct的:

代码语言:javascript
复制
struct Counter
{
   public int i;
}

struct Something
{
   public Counter c;
}

Something s;
s.c.i++;

我非常肯定这里的c是按地址加载的,否则它会创建一个Counter副本。所以你不能用财产来做这件事。

票数 8
EN

Stack Overflow用户

发布于 2011-04-29 18:21:02

如果将字段作为ref参数传递给子例程,则应该会看到编译器为其发出一个ldflda,以便获得传入的引用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5835747

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档