1

そのため、過去 1 時間、VB.NET で動的メソッドを使用して、呼び出し元のクラス内でサブを呼び出そうとしました。

私はいくつかのことで運がありませんでした。まず、MSDN (http://msdn.microsoft.com/en-us/library/ms228971.aspx) の例に従おうとしているときに、メソッドを Sub にすることができず、何も返さなかったので、別のメソッドを呼び出したいだけです。

例えば。

Private Sub FirstMethod()

    Dim methodArgs As Type() = {}
    Dim MyNewMethod As New DynamicMethod("MyNewMethod", Nothing, methodArgs, GetType(Crux).Module)
    Dim il As ILGenerator = MyNewMethod.GetILGenerator()
    il.Emit(OpCodes.Call, OtherMethod)
    il.Emit(OpCodes.Ret)
End Sub

Private Sub OtherMethod()
    MsgBox("This is some other method!")
End Sub

問題は、何も返さないで、OtherMethod() を呼び出したいだけで、コード内で (デリゲートを介して) 動的メソッドを呼び出す方法が欲しいということです。MSDN はまったく役に立ちませんでした。私がやりたいことを実行する方法を説明しようとするものさえ何も見つかりません。

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

4

2 に答える 2

1

linq式を使用して、それらをデリゲートにコンパイルしてみませんか。昔ながらのreflection.emitよりも簡単です。

  class Demo {
    public void Foo() {
        var instance = new Demo();
        var method = Expression.Call(Expression.Constant(instance), instance.GetType().GetMethod("Bar"));
        var del = Expression.Lambda(method).Compile();
        del.DynamicInvoke();
    }

    public void Bar() {
        Console.WriteLine("Bar");
    }
}
于 2012-05-07T21:25:45.600 に答える