使用C#操作代码来发出返回对象的方法
本文关键字:返回 对象 方法 操作 代码 使用 | 更新日期: 2023-09-27 18:27:07
我正在创建一个动态类型,它有一个我想返回对象的方法。我不明白如何做到这一点。到目前为止,我拥有的是:
// .. stuff to create type builder
MethodBuilder builder =
typeBuilder.DefineMethod(
method.Name,
MethodAttributes.Virtual | MethodAttributes.Public,
method.CallingConvention,
method.ReturnType,
typeArray1);
builder.InitLocals = true;
ILGenerator gen = builder.GetILGenerator();
Object myObjectIdLikeToReturn = someMethodCall();
//gen.??(??????????) // here's where I'm lost
gen.Emit(OpCodes.Ldloc_0);
gen.Emit(OpCodes.Ret);
我相信,如果我正确地阅读了msdn,我需要在堆栈上获得myObjectIdLikeToReturn的引用——然而我运气不好。有人能给我指正确的方向吗?
编辑:使其更加清晰。我正在尝试用IL:写类似的东西
public virtual Object MyNewMethod() {
return myObjectIdLikeToReturn;
}
您有这行:
Object myObjectIdLikeToReturn = someMethodCall();
你说你"想把对myObjectIdLikeToReturn
的引用放到堆栈上",但这是不可能的。我认为你混淆了这些事情发生的时间。IL生成代码类似于编译——一切都需要静态已知。而myObjectIdLikeToReturn
是一个在生成代码时碰巧存在的变量,但对实际生成的类没有任何意义。你不能"烘焙"对某个任意运行时对象的引用,这个想法根本没有任何意义。
您唯一的解决方案是以某种方式让您的IL执行对someMethodCall
的调用。但是,如果不了解该方法的作用及其与生成类型的联系,就很难详细说明如何实现这一点。