2

デリゲートパラメーターを受け取るメソッドを持つクラスがあり、リフレクションで呼び出されるクラスがあります。

namespace NSa
{
    public delegate void dlg(string p1, string p2);

    public class dyn
    {
        void method(dlg d)
        {
            // call d...
        }
    }
}

別のクラスではdyn.method、リフレクションで呼び出す必要があります。

namespace NSa
{
    public delegate void dlg(string p1, string p2);

    public void fun(string a, string b) { Console.Write(a); }

    public class other
    {
        void caller_method()
        {
            dlg x = fun;

            //... 

            var assembly = System.Reflection.Assembly.LoadFile("xx.dll");
            System.Reflection.BindingFlags flags = (System.Reflection.BindingFlags.NonPublic | System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Static | System.Reflection.BindingFlags.Instance | System.Reflection.BindingFlags.DeclaredOnly);
            System.Reflection.Module[] dynModules = assembly.GetModules();
            Type dynType = dynModules[0].GetType("NSa.dyn");
            object dynObj = Activator.CreateInstance(dynType);               
            System.Reflection.MethodInfo dynMethod = dynType.GetMethods(flags).Where(m => m.Name == "method").First();
            dynMethod.Invoke(dynObj, new object[] {x});             
        }
    }
}

例外が発生します:

Object of type 'NSa.dlg' cannot be converted to type 'NSa.dlg'.

私は何が欠けていますか?

4

1 に答える 1