Я думаю, вы думаете об этом неправильно. Разработчики языка не сказали себе: «что нам действительно нужно, так это пометить метод как , который должен быть переопределен , давайте изобретем эту вещь, называемую abstract ». Они сказали: «Виртуальный метод позволяет нам представить идею, что каждый производный тип этого базового типа должен быть в состоянии сделать этот метод . Но что, если нет разумного кода , который может перейти к версии метода базового класса? Я знаю, давайте изобретем эту вещь, называемую абстрактным методом для этого обстоятельства. "
Вот проблема, которую абстрактные методы были предназначены для решения: у вас есть метод, общий для всех производных классов, но нет разумной реализации базового класса, НЕ «Мне нужен способ заставить мои производные типы предоставлять реализацию». То, что производные типы вынуждены предоставлять реализацию, является следствием решения , но не проблемой , предназначенной для решения в первую очередь.
Язык C # не имеет механизма для решения проблемы «Я должен заставить свой подтип обеспечивать собственную реализацию этого метода», потому что это не проблема, которую, насколько мне известно, разработчики языка когда-либо рассматривали, было бы проблемой для большинство наших клиентов.
Итак, мой вопрос к вам: почему вы хотите это сделать? Конечно, разработчик производного класса должен определить, является ли реализация базового класса корректной для производного класса или нет. Это не ваше дело. И даже если бы у вас был какой-то способ сделать это, что помешало бы разработчику просто сказать
override void M() { base.M(); }
Можете ли вы объяснить, с какой целью вы пытаетесь навязать эту работу разработчикам ваших производных классов? Возможно, есть лучший способ добиться того, чего вы хотите.
Но в более общем плане: я не уверен, что ваша иерархия разумно разработана в первую очередь. Когда я вижу метод GiveBonus для Employee, я предполагаю, что это означает, что «сотрудник может дать бонус», а не «сотрудник может получить бонус». Конечно, менеджер дает бонус, а сотрудник получает бонус. Я думаю, что вы можете заставить иерархию сотрудников делать слишком много.