Normalement, quand je veux appeler une méthode dynamique dans un autre objet ILGenerator qui est en train d'écrire une méthode sur le même type que je fais ce qui suit:Appelez une méthode générée dynamiquement sur un ILGenerator sur le même type
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.
Cependant, j'ai rencontré le problème suivant: Je ne peux pas avoir une référence au constructeur de méthode de la méthode que je veux appeler, car il est généré par un autre framework (je ne reçois qu'une référence au TypeBuilder actuel). Cette méthode est définie comme protégée virtuelle (et overriden sur le methodbuilder Je ne peux pas obtenir une référence) dans la classe de base du type dynamique actuelle et je peux obtenir une référence à ce en faisant ceci:
generator.Emit(OpCodes.Ldarg_0); // reference to the current object
generator.Emit(OpCodes.Ldstr, "someArgument");
generator.Emit(OpCodes.Call, baseType.GetMethod("SomeMethodDefinedInBaseClassThatWasOverridenInThisDynamicType"));
Le problème est que cela appelle la méthode sur le type de base et non la méthode overrid.
Y a-t-il un moyen pour que je puisse obtenir une référence à un constructeur de méthodes ayant seulement une référence au typebuilder qui l'a défini? Ou existe-t-il un moyen d'appeler une méthode en utilisant ILGenerator sans avoir à lui passer l'objet 'MethodInfo'?
J'ai travaillé, merci. –