如何避免在子类调用它时调用基本方法两次,同样也调用其中一个父类

use*_*657 0 c# inheritance

我有以下关于野生动物园的代码:

public class Bird
{
  public void virtual Exercise()
  {
     some logic here
  }

  public void virtual Feed()
  {
     Exercise();

     some logic here
  }
}


public class Penguin : Bird
{
  public void override Exercise()
  {
     base.Exercise();
     some logic here
  }

  public void override Feed()
  {
     Exercise();
     base.Feed();
     some logic here
  }
}
Run Code Online (Sandbox Code Playgroud)

所以每次喂鸟都必须运用它.然而,一只鸟可以在没有喂食的情况下锻炼.

企鹅是一种特殊类型的鸟类,需要进行鸟类锻炼和一些特定的企鹅锻炼.喂养企鹅需要喂鸟以及一些额外的企鹅需求.

我在这里使用此代码的问题是,当Feed被调用时,它会进行两次鸟类练习.企鹅会变得非常疲惫.

我怎样才能改进代码,这样当企鹅被喂食时,它们只会在每次喂食时为鸟类和企鹅运动一次?

Gje*_*ema 9

只需从Penguin.Feed()调用中删除Exercise()即可.因为,正如您所说,当您调用base.Feed()时,将调用Exercise(),因此这样做是多余的.并且base.Feed()调用将调用Penguin版本的Exercise(),因此您将获得该鸟的正确练习.

(从问题中移除后删除了对哺乳动物的引用)