Gra*_*ant 1 .net c# inheritance event-handling
我有一个关于.NET框架中继承的一般问题,假设你有两个类,第一个叫做Parent,第二个叫做Child.子继承自Parent.
Parent希望确保每个子实例在加载时执行特定的代码段,而不管子代是否有明确指定的onLoad代码.
根据我的经验,如果我在父级而不是在子级中处理onLoad,则父级onLoad代码将触发但如果在两个类中处理它,则仅触发子代码.
它是否正确?如果是这样,我怎样才能确保父母代码永远为孩子开火......
您已经发现了脆弱的基类问题.处理它的一种方法是这种模式:
public class Parent
{
public void OnLoad()
{
// Important load stuff goes here
OnLoadInternal();
}
protected virtual void OnLoadInternal()
{
// No implmentation in parent; child can override if needed
}
}
public class Child : Parent
{
protected override void OnLoadInternal()
{
base.OnLoadInternal();
// Important load stuff, but can't break parent by omitting base call
}
}
Run Code Online (Sandbox Code Playgroud)
父母保证让它的OnLoad方法做它应该做的事情,但是孩子有办法通过覆盖OnLoadInternal来添加额外的处理.