如何扩展继承的方法而不是覆盖它?

3
我有两个类,AlphaBeta,其中Beta是从Alpha继承而来的。 Alpha类有一个名为Roger()的方法。我希望Beta类也有相同的Roger()函数,但我不想覆盖Alpha中的所有代码。我想要的是执行Alpha类中的Roger()函数,然后在Beta类中添加一些其他代码。
基本上,我想扩展Roger()方法,而不是完全替换它。在C#中是否可能实现这一点?
例如: Alpha类:
protected virtual void Roger()
{
  Console.Write("123");
}

Beta 类:

protected something void Roger()
{
  Console.Write("456");
}

Beta.Roger()将会打印出"123456"


2
你可以调用 base.Roger(); 来打印123,然后调用 BetaClass.Roger(); 打印456。 - styx
“extend”在这里没有意义。你所要求的是调用基本方法。 - Panagiotis Kanavos
1个回答

13

您仍将使用 override 关键字,但在执行任何其他操作之前,您还需要调用 base.Roger()

protected override void Roger()
{
    base.Roger();
    Console.Write("456");
}

这等同于:

protected override void Roger()
{
    Console.Write("123");
    Console.Write("456");
}

在此处了解有关 base 的更多信息


正是我想要的!谢谢。 - CR0N0S.LXIII
@CR0N0S.LXIII请确保理解newoverride修饰符之间的区别。此外,对于给定类层次结构的构造函数,在开头/结尾一致地调用base将使代码更易于理解。 - Guillaume S.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接