¿Cómo crear un método de anulación usando Mono.Cecil?

Estoy usando Mono.Cecil para generar un ensamblado que contiene una clase derivada que anula un método específico en una clase base importada. El método de anulación es una anulación 'implícita'. El problema es que no puedo entender cómo designarlo como una anulación.

Estoy usando el siguiente código para crear el método de anulación.

    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);
    }

Tengo entendido que una anulación implícita debe tener la misma firma que el método heredado. Usando el código anterior, cuando veo el método resultante en Reflector, la clase base y los métodos de la clase derivada tienen exactamente la misma firma, a saber, "public virtual void f (int param)".

He intentado eliminar el atributo "virtual" explícito, pero luego el método derivado termina como "public void f (int param) '.

¿Cómo obtengo el método derivado para tener la firma correcta de "anulación pública nulo f (int param)"

NOTA: Tengo un método de extensión ("TypeDefinition.Copy") que clona un MethodInfo y devuelve un MethodDefinition importando todos los tipos referenciados, etc.

Respuestas a la pregunta(2)

Su respuesta a la pregunta