gpt4 book ai didi

c# - 是否可以从 MethodBuilder/ConstructorBuilder 调用 DynamicMethod

转载 作者:行者123 更新时间:2023-11-30 17:11:58 24 4
gpt4 key购买 nike

我有一个从 ConstructorBuilder 创建的 ILGenerator,我想用它创建和调用 DynamicMethod,但我得到一个 InvalidOperationException -无法从不同的模块导入全局方法或字段。

var constructorBuilder = typeBuilder.DefineConstructor(...);
var ilGenFromCtor = constructorBuilder.GetILGenerator();
.
.
.
var dynamicMethod = new DynamicMethod("Name", ReturnType, Type.EmptyTypes, true);
var ilGenFromDynamicMethod = dynamicMethod.GetILGenerator();
.
.
var @delegate = dynamicMethod.CreateDelegate();

ilGenFromCtor.Emit(OpCodes.Call, @delegate.Method);

--Or

ilGenFromCtor.Emit(OpCodes.Call, dynamicMethod);

10x

最佳答案

因为您实际上是在运行时定义一个完整的程序集,所以您将不得不在程序集内的某处声明该方法(可能在您从中获得 ConstructorBuilder 的类中)通过使用 TypeBuilder.DefineMethod 的重载之一和 MethodBuilder它返回的实例。 DynamicMethod 对象在 .NET 运行时的处理方式与 Reflection.Emit 使用的方式完全不同。使用 MethodBuilder 定义方法后,您可以将其用作 ILGenerator.Emit 的第二个参数。

关于c# - 是否可以从 MethodBuilder/ConstructorBuilder 调用 DynamicMethod,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11059165/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com