Я не знаю всех деталей, но если это ситуация, когда на самом деле неуместно наследовать, вы могли бы вместо этого использовать интерфейсы.
Объявить интерфейс, реализовать его в каждом из ваших классовтогда вы сможете привести непосредственно к интерфейсу и запустить функцию оттуда.Мой C # немного шаткий, но что-то вроде
Interface IMethodizable
{
void DoMethod();
}
class Level1 : IMethodizable {
void DoMethod(){
//insert code here
}
}
class Level2 : IMethodizable {
void DoMethod(){
//insert code here
}
}
Это работает особенно хорошо, если единственное, что объединяет классы - это метод.Это очень похоже на наличие виртуализированного метода в базовом классе и его переопределение.Так что этот шаблон лучше, только если вы не должны наследовать, или DoMethod также должен запускаться на других объектах, не наследующих от базы, и др.