基类是否可能在调用派生类中的方法时得到通知?
本文关键字:方法 通知 是否 派生 调用 基类 | 更新日期: 2023-09-27 18:15:43
考虑以下小设计:
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
类)的重写版本中完成时?
你可以尝试这样做
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类上订阅自己的事件并对其作出反应。
因此,到目前为止访问基类的唯一方法是通过base关键字,该关键字以某种方式保存对基类的引用,该基类通过调用其构造函数初始化。
所以你的答案是否定的
我建议使用两个方法——一个用于公共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
}
}