【问题标题】:MethodBuilder.CreateDelegate throws exception:'Derived classes must provide an implementation.'MethodBuilder.CreateDelegate 抛出异常:'派生类必须提供实现。'
【发布时间】:2020-01-27 09:56:23
【问题描述】:

我想从全局动态方法中获取委托的实例,当我做最后一步时,从 MethodBuilder 类中调用 CreateDelegate 的方法,它抛出了这样的异常,我试图找到 .net 框架的代码源到找到原因,但失败了,谁能帮我解决这个问题?

    [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();
    }

【问题讨论】:

    标签: c# typebuilder


    【解决方案1】:

    几分钟后,我明白全局方法是为 Visual Basic.Net 设计的。 但是,你也可以用 c# 访问它,所以这会产生一个问题,即每个方法在 c# 中必须有一个声明类型,所以如果你尝试使用这样的函数,你总是会得到这样的异常。

    【讨论】:

    • 我认为这个问题现在可以结束了,不需要更多的答案,谢谢,我把这个答案留在这里,以帮助其他有同样问题的人。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-09
    相关资源
    最近更新 更多