关于.NET框架中的继承性的一般问题

Gra*_*ant 1 .net c# inheritance event-handling

我有一个关于.NET框架中继承的一般问题,假设你有两个类,第一个叫做Parent,第二个叫做Child.子继承自Parent.

Parent希望确保每个子实例在加载时执行特定的代码段,而不管子代是否有明确指定的onLoad代码.

根据我的经验,如果我在父级而不是在子级中处理onLoad,则父级onLoad代码将触发但如果在两个类中处理它,则仅触发子代码.

它是否正确?如果是这样,我怎样才能确保父母代码永远为孩子开火......

Rat*_*eek 7

您已经发现了脆弱的基类问题.处理它的一种方法是这种模式:

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来添加额外的处理.