首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以从MethodBuilder/ConstructorBuilder调用DynamicMethod

是否可以从MethodBuilder/ConstructorBuilder调用DynamicMethod
EN

Stack Overflow用户
提问于 2012-06-16 06:58:43
回答 1查看 959关注 0票数 3

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

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-16 20:03:48

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11059165

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档