Я поделился приведенным ниже решением на основе моего исследования, но внес несколько изменений в код, которым вы поделились, исходя из моего восприятия, поскольку код в вопросе недействителен в некоторых случаях.
- Добавлен пустой интерфейс IA, поскольку класс A не реализует какой-либо публичный метод.
- Определен класс A как абстрактный, так как любой неабстрактный класс не может определить абстрактный метод.
Удалено тело для метода Append внутри класса A, так как абстрактный метод не может иметь тело.
public interface IA
{
}
public abstract class A : IA
{
protected abstract void Append();
}
public class B : A
{
protected override void Append()
{
//override definition
}
}
public class MyClass : B
{
//Here I want to change the definition of Append method.
//You can do is hide the method by creating a new method with the same name
public new void Append() { }
}
Ответ: Вы не можете переопределить не виртуальный метод. Самое близкое, что вы можете сделать, это скрыть метод, создав новый метод с тем же именем, но это не рекомендуется, поскольку оно нарушает принципы хорошего дизайна.
Но даже сокрытие метода не даст вам времени выполнения полиморфной отправки вызовов метода, как истинный вызов виртуального метода.