【问题标题】:How to extend inherited method instead of overriding it?如何扩展继承的方法而不是覆盖它?
【发布时间】:2019-12-31 09:06:39
【问题描述】:

我有两个类,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”

【问题讨论】:

  • 你可以调用base.Roger();,它会打印123,然后调用`BetaClass.Roger();`它会打印456
  • extend 在这里没有意义。你问的是调用基本方法

标签: c# .net oop


【解决方案1】:

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

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

这相当于:

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

Learn more about base here

【讨论】:

  • 正是我想要的!谢谢。
  • @CR0N0S.LXIII 确保了解 newoverride 修饰符之间的区别。此外,如果base 在给定的类层次结构的构造函数的开头/或结尾始终被调用,则代码将更容易理解
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多