gpt4 book ai didi

c# - ILGenerator : Load created method

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

我正在使用 System.Reflection.Emit,有时我想从 MethodBuilder 创建一个委托(delegate):

MethodBuilder fooBuilder = createFooMethodBuilder();
ILGenerator ilGenerator = ...
Type delegateType = typeof(DelegateType);
LocalBuilder delegateVar = ilGenerator.DeclareLocal(delegateType);
//Somehow create emit instructions to create delegate from fooBuilder
//Store delegate in delegateVar using

我发现要从静态函数创建委托(delegate),可以使用类似这样的方法:

ldnull 
ldftn void class Test.MainClass::bar()
newobj instance void class Test.DelegateType::'.ctor'(object, native int)

但现在我卡住了。我需要一种方法来 ldftn MethodBuilder,然后我需要一种方法来发出下一行的指令。而且我不知道如何获得接受 native int 的构造函数。

有什么建议吗?

最佳答案

native int 是 C# 中的 IntPtr

您可以使用 Type.GetConstructor 获取委托(delegate)类型的 ConstructorInfo:

var constructorInfo =
delegateType.GetConstructor(new Type[] { typeof(object), typeof(IntPtr) });

然后您可以像这样发出 IL 指令:

il.Emit(OpCodes.Ldnull);
il.Emit(OpCodes.Ldftn, someMethodInfo);
il.Emit(OpCodes.Newobj, constructorInfo);

关于c# - ILGenerator : Load created method,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4362167/

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