У меня есть один базовый класс C1
, который обеспечивает реализацию по умолчанию пары методов как C2
и множество пользовательских реализаций Cx
(+20), которые выглядят так:
abstract class C1
{
public abstract void M1();
}
abstract class C2 : C1
{
// other overridden members ...
// M1(); has no default implementation yet.
}
class Cx : C2
{
public override void M1()
{
// ...
}
}
Теперь я бы хотел связать C2.M1
и Cx.M1
, потому что мне нужно добавить новую общую функциональность. Обычно я создаю новый абстрактный метод и вызываю его вторым base классом, подобным этому:
abstract class C1
{
public abstract void M1();
}
abstract class C2 : C1
{
// M1 should get a default implementation
// and then M1 in the next derived class should be called
public override void M1()
{
// ...
M1Internal();
}
protected abstract void M1Internal();
}
class Cx : C2
{
protected override void M1Internal()
{
// ...
}
}
Тем не менее, у меня более 20 таких классов, и их обновление - большая работа, поэтому мне было интересно, есть ли другой способ, который позволил бы мне переопределить M1
в C2
и Cx
и вызвать их в этом порядке C1.M1()
затем Cx.M1()
без создания нового вспомогательного метода промежуточный . Есть ли лучший образец для таких случаев?