Sto usando Mono.Cecil per generare un assembly che contiene una classe derivata che sostituisce un metodo specifico in una classe base importata. Il metodo di override è un override "implicito". Il problema è che non riesco a capire come definirlo come un override.Come creare un metodo di override utilizzando Mono.Cecil?
Sto usando il seguente codice per creare il metodo di sostituzione.
void CreateMethodOverride(TypeDefinition targetType,
TypeDefinition baseClass, string methodName, MethodInfo methodInfo)
{
// locate the matching base class method, which may
// reside in a different module
MethodDefinition baseMethod = baseClass
.Methods.First(method => method.Name.Equals(methodName));
MethodDefinition newMethod = targetType.Copy(methodInfo);
newMethod.Name = baseMethod.Name;
newMethod.Attributes = baseMethod.Attributes;
newMethod.ImplAttributes = baseMethod.ImplAttributes;
newMethod.SemanticsAttributes = baseMethod.SemanticsAttributes;
targetType.Methods.Add(newMethod);
}
È a mia conoscenza che un override implicito deve avere la stessa firma del metodo ereditato. Usando il codice sopra, quando visualizzo il metodo risultante in Reflector, la classe base ei metodi della classe derivata hanno la stessa identica firma, cioè "public virtual void f (int param)".
Ho provato a rimuovere l'attributo esplicito "virtuale", ma poi il metodo derivato finisce come "public void f (int param)'.
Come faccio a ottenere il metodo derivato di avere la giusta" public override void f (int param)" firma
NOTA:? ho una metodo di estensione ("TypeDefinition.Copy"), che clona un MethodInfo e restituisce un MethodDefinition importando tutti i tipi di riferimento, ecc
Grazie per le informazioni - esattamente quello che mi serviva. Per qualche motivo, non ho ricevuto una notifica via email da SO o dal gruppo Mono-Cecil. Ci scusiamo per aver chiesto attraverso più canali! –
Nessun problema, siamo contenti di aver trovato una soluzione al tuo problema! –