7

私は、IL レベルでターゲット アセンブリを操作する必要がある、Mono.Cecil を使用して小さな IL ウィービング アプリケーションを作成しています。

私の質問は非常に単純ですが、それでもこの問題は非常に紛らわしいと思います。との指示の実際的な違いは何ですか?ldfldldflda

msdn に相談したところldfld、フィールドの値をフェッチしている間に、フィールドldfldaのアドレスを取得しているようです。わかりました...しかし、これはどういう意味ですか?前者は値型 (および文字列) に使用され、後者は参照型に使用されると最初は思っていましたが、C# スニペットをコンパイルして Reflector で確認したところ、間違っていることがわかりました。

C# コンパイラがldfldaの代わりに出力するときに明確なパターンを見つけることができませんでしldfldた。検索しても、これを説明する記事は見つかりませんでした。ldfldaでは、代わりにいつ使用するのldfldですか?

どんな助けでも大歓迎です。

4

2 に答える 2

7

私はそれがstructuresに使用されていると思います:

struct Counter
{
   public int i;
}

struct Something
{
   public Counter c;
}

Something s;
s.c.i++;

here はアドレスによってロードされると確信しています。cそうしないと、のコピーが作成されますCounter。そのため、適切にこれを行うことはできません。

于 2011-04-29T18:20:37.403 に答える
1

フィールドを ref パラメーターとしてサブルーチンに渡す場合、渡す参照を取得するために、コンパイラーが ldflda を発行するのを確認する必要があります。

于 2011-04-29T18:21:02.597 に答える