MethodBuilder.CreateDelegate 抛出异常:'Derived classes must provide an implementation.'
MethodBuilder.CreateDelegate throws exception:'Derived classes must provide an implementation.'
我想从全局动态方法中获取委托实例,当我做最后一步时,从MethodBuilder中调用CreateDelegate方法class,它抛出这样的异常,我试图找到代码.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();
}
几分钟后,我明白全局方法是为 Visual Basic.Net 设计的。
然而,你也可以用c#访问它,所以这会产生一个问题,即每个方法都必须在c#中有一个声明类型,所以如果你尝试使用这样的函数,你总是会得到这样的异常。
我想从全局动态方法中获取委托实例,当我做最后一步时,从MethodBuilder中调用CreateDelegate方法class,它抛出这样的异常,我试图找到代码.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();
}
几分钟后,我明白全局方法是为 Visual Basic.Net 设计的。 然而,你也可以用c#访问它,所以这会产生一个问题,即每个方法都必须在c#中有一个声明类型,所以如果你尝试使用这样的函数,你总是会得到这样的异常。