0

Emit 名前空間の学習を始めたばかりです。以下は有効ですか? これにより例外がスローされます。

public class EmitTest
{
    public void Test()
    {
        DynamicMethod dynMeth = new DynamicMethod("Foo", null, null, typeof(EmitTest));
        ILGenerator gen = dynMeth.GetILGenerator();
        gen.EmitWriteLine("Foo");
        gen.Emit(OpCodes.Ret);
        dynMeth.Invoke(null, null);
        dynamic d = this;
        d.Foo();
    }
}

これを意図したとおりに機能させる方法はありますか、それとも DLR の制限ですか? ここでは、新しい void メソッド Foo() を作成し、それを EmitTest クラスのメンバーとして作成しました。ランタイムは、EmitTest で Foo() が見つからないと言います

4

1 に答える 1

3

パラメータを誤解していownerます。
MSDN のコメント: (強調を追加)

owner

動的メソッドが論理的に関連付けられている Type。動的メソッドは、型のすべてのメンバーにアクセスできます。

メソッドを既存の型に追加することはできません。

于 2012-11-27T03:35:30.653 に答える