当调用派生类中的方法时,基类是否有可能获得通知?

时间:2015-10-01 12:11:10

标签: c# oop language-agnostic

考虑以下小设计:

public class Parent
{
  public event EventHandler ParentWentOut;
  public virtual void GoToWork()
  {
     ParentWentOut();
  }
}

public class Mother : Parent
{
   public override void GoToWork()
   {
     // Do some stuff here
     base.GoToWork(); // <- I don't want to write this in any derived class. 
                      //    I want base class's method to be automatically called.
   }
}

当这个方法在后代的重写版本(这里是Parent.GoToWork类)完成时,是否有任何机制可以隐式自动调用Mother方法?

如果有其他语言而不是C#能够这样做,我将非常感谢知道。

3 个答案:

答案 0 :(得分:6)

你可以尝试实现类似这样的东西

public class Parent
{
   public event EventHandler ParentWentOut;
   public void GoToWork()
   {
     BeforeParentWentOut();
     ParentWentOut();
     AfterParentWentOut();         
   }

   protected virtual void BeforeParentWentOut()
   {
      // Dont do anything, you can even make it abstract if it suits you
   }

   protected virtual void AfterParentWentOut()
   {
      // Dont do anything, you can even make it abstract if it suits you
   }
}



public class Mother : Parent
{
   protected override void BeforeParentWentOut()
   {
      // Do some stuff here
   }
}

此外,您可以在Mother课程上订阅您自己的活动并对此做出反应。

编辑:更新受保护,添加前/后方法以处理何时将代码添加到父实现

答案 1 :(得分:1)

我建议使用两种方法 - 一种用于公共API,另一种用于方法的内部功能。

public class Parent
{
  public event EventHandler ParentWentOut;
  public void GoToWork()
  {
     GoToWorkOverride();
     ParentWentOut();
  }

  protected virtual void GoToWorkOverride()
  {}
}

public class Mother : Parent
{
   protected override void GoToWorkOverride()
   {
       // Do some stuff here
   }
}

答案 2 :(得分:0)

因此,访问基类的唯一方法是通过base关键字,其中一些如何保存对通过调用其构造函数初始化的基类的引用。

因此你的答案是否定的。