考虑以下小设计:
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#能够这样做,我将非常感谢知道。
答案 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关键字,其中一些如何保存对通过调用其构造函数初始化的基类的引用。
因此你的答案是否定的。