Я использую System.Reflection.Emit, и в какой-то момент я хочу, чтобы создать делегат из MethodBuilder:ILGenerator: Load создан метод
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
я мог бы узнать, что для создания делегатов из статических функций-то как это используется:
ldnull
ldftn void class Test.MainClass::bar()
newobj instance void class Test.DelegateType::'.ctor'(object, native int)
Но теперь я застрял. Мне нужен способ ldftn MethodBuilder, а затем мне нужен способ исправить инструкцию для следующей строки. И я понятия не имею, как получить конструктор, который принимает собственный int.
Любые предложения?
Интересный вопрос. Если вы не получите решение, вы можете отправить вызов на [Delegate.CreateDelegate] (http://msdn.microsoft.com/en-us/library/system.delegate.createdelegate.aspx). – dtb 2010-12-06 00:19:14