【发布时间】:2019-07-01 05:48:54
【问题描述】:
我有一个基类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 多个这样的类,并且全部更新它们需要大量工作,所以我想知道是否有另一种方法可以让我在 C2 和 Cx 中覆盖 M1 并调用它们按此顺序 C1.M1() 然后 Cx.M1() 而不创建新的 intermediate 辅助方法。这种情况有没有更好的模式?
【问题讨论】:
-
C1、C2和Cx类有什么关系?谁继承谁? -
@MindSwipe 哎呀,对不起,我忘了添加继承。固定!
-
@John 我可以,但这意味着将相同的代码添加到所有其他类。我宁愿避免这种情况,因为它很容易忘记。
-
C2 中的
// Other overriden members...是什么意思? M1 是否在 C2 中实现? -
@MindSwipe 我更新了代码。不,
M1目前没有默认实现,但它应该有一个。然后应该调用下一个M1。
标签: c# inheritance