Как создать метод переопределения с помощью Mono.Cecil?

Я использую Mono.Cecil для генерации сборки, содержащей производный класс, который переопределяет определенный метод в импортированном базовом классе. Метод переопределения является неявным переопределением. Проблема в том, что я не могу понять, как обозначить это как переопределение.

Я использую следующий код для создания метода переопределения.

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

Насколько я понимаю, неявное переопределение должно иметь ту же сигнатуру, что и унаследованный метод. Используя приведенный выше код, при просмотре результирующего метода в Reflector базовый класс и методы производного класса имеют абсолютно одинаковую сигнатуру, а именно: "public virtual void f (int param)".

Я попытался удалить явный «виртуальный» атрибут, но затем производный метод заканчивается как «public void f (int param)».

Как получить у производного метода правильную подпись "public override void f (int param)"?

ПРИМЕЧАНИЕ. У меня есть метод расширения («TypeDefinition.Copy»), который клонирует MethodInfo и возвращает MethodDefinition путем импорта всех ссылочных типов и т. Д.

Ответы на вопрос(2)

Ваш ответ на вопрос