Вы не можете - эта разница в поведении - весь смысл использования виртуального / переопределения.
Когда вы объявляете метод с помощью «new», вы говорите: «Я знаю, что скрываю метод с той же сигнатурой, а не переопределяю его; я не хочу полиморфного поведения».
Аналогично, когда вы объявляете метод без указания «virtual», вы говорите: «Я не хочу, чтобы подклассы могли переопределять этот метод».
Почему ты хочешь это сделать? Вы на самом деле просто пытаетесь переопределить метод, который не был объявлен виртуальным? Если так, то нет никакого пути к этому - и на то есть веская причина. Если автор не разработал класс с учетом полиморфизма, он может легко сломаться, если вы сможете переопределить метод.
Конечно, если вы объявите переменную типа подкласса, например:
C c = new C();
c.method();
тогда будет вызывать только что объявленный метод.