MethodBuilder.CreateDelegate выдает исключение: «Производные классы должны обеспечивать реализацию». - PullRequest
0 голосов
/ 27 сентября 2019

Я хочу получить экземпляр делегата из глобального динамического метода, когда я делаю последний шаг, вызываю метод CreateDelegate из класса MethodBuilder, он выдает такое исключение, я пытался найти источник кода .net framework длянайти причину, но не смог ли кто-нибудь помочь мне решить эту проблему?

    [TestMethod]
    public void Test()
    {
        //THESE CODE COPIES FROM MSDN
        AssemblyBuilder assembly = AssemblyBuilder.DefineDynamicAssembly(new AssemblyName("TempAssembly"), AssemblyBuilderAccess.RunAndCollect);
        ModuleBuilder module = assembly.DefineDynamicModule("TempModule");
        MethodBuilder method = module.DefineGlobalMethod
                    ("MyMethod1", MethodAttributes.Static | MethodAttributes.Public,
                        null, null);
        ILGenerator generator = method.GetILGenerator();
        generator.EmitWriteLine("Hello World from global method.");
        generator.Emit(OpCodes.Ret);
        // Fix up the 'TempModule' module .
        module.CreateGlobalFunctions();

        //ERROR:
        Action action = method.CreateDelegate(typeof(Action), null) as Action;
        action();
    }

1 Ответ

0 голосов
/ 27 сентября 2019

Через несколько минут я понимаю, что глобальный метод предназначен для Visual Basic.Net.Однако вы можете получить к нему доступ также с помощью c #, поэтому возникает проблема, заключающаяся в том, что у каждого метода должен быть объявленный тип в c #, поэтому, если вы попытаетесь использовать такие функции, вы всегда получите такое исключение.

...