Обычно, когда я хочу, чтобы вызвать динамический метод в другом ILGenerator объекте, написание метода на тот же тип я следующее:Вызов динамически сгенерированный метод на ILGenerator на тот же тип
generator.Emit(OpCodes.Ldarg_0); // reference to the current object
generator.Emit(OpCodes.Ldstr, "someArgument");
generator.Emit(OpCodes.Call, methodBuilder); //this methodbuilder is also defined on this dynamic type.
Однако я столкнулся со следующей проблемой: у меня нет ссылки на метод-метод метода, который я хочу вызвать, потому что он генерируется другой структурой (я получаю только ссылку на текущий TypeBuilder). Этот метод определен как защищенный виртуальный (и перекрываться на MethodBuilder я не могу получить ссылку) в базовом классе текущего динамического типа, и я могу получить ссылку на него, делая это:
generator.Emit(OpCodes.Ldarg_0); // reference to the current object
generator.Emit(OpCodes.Ldstr, "someArgument");
generator.Emit(OpCodes.Call, baseType.GetMethod("SomeMethodDefinedInBaseClassThatWasOverridenInThisDynamicType"));
Проблема заключается в том, что это вызывает метод базового типа, а не метод переопределения.
Есть ли способ получить ссылку на конструктор методов, имеющий ссылку на создатель типа, который его определил? Или существует способ вызова метода с использованием ILGenerator без передачи ему объекта MethodInfo?
Работал, спасибо. –