7

私は何年もの間.NETとC#をプログラムしてきましたがDynamicMethod、リフレクションのコンテキスト内で動的アセンブリの概念とともにこのタイプに遭遇したのはごく最近のことです。それらは常にIL(ランタイムコード)生成内で使用されるようです。

残念ながら、MSDNは、動的アセンブリ/メソッドの実際が何であるか、またそれらを何に使用するかを定義するという非常に貧弱な仕事をしています。誰かがここで私を教えてくれませんか?DLRとは何か関係がありますか?実行時のアセンブリおよびメソッドの静的(通常)生成とはどのように異なりますか?それらをいつどのように使用するかについて何を知っておくべきですか?

4

1 に答える 1

4

DynamicMethodは、新しいアセンブリなしでメソッドを作成するために使用されます。クラス用に作成することもできるので、そのプライベートメンバーにアクセスできます。最後に、DynamicMethodクラスは、メソッドの実行に使用できるデリゲートを作成します。たとえば、プライベートフィールドにアクセスするには、次のようにします。

var d = new DynamicMethod("my_dynamic_get_" + field.Name, typeof(object), new[] { typeof(object) }, type, true);
var il = d.GetILGenerator();
il.Emit(OpCodes.Ldarg_0);
il.Emit(OpCodes.Ldfld, field);
if (field.FieldType.IsValueType)
    il.Emit(OpCodes.Box, field.FieldType);
else
    il.Emit(OpCodes.Castclass, typeof(object));

il.Emit(OpCodes.Ret);
var @delegate = (Func<object, object>)d.CreateDelegate(typeof(Func<object, object>));

それが役に立てば幸い。

于 2011-12-22T23:32:47.280 に答える