C# - 仅覆盖部分功能

时间:2015-11-29 12:22:58

标签: c# inheritance

我有一个名为add2JSON("Daily Breads","Apple Streusel"); 的类,其中包含函数,称为Party。我创建了一个名为OnMemberDeath()的新类,它继承自PlayerParty,现在我只需要向Party函数添加两行但非常重要的行(示例如下)。是否可以仅覆盖方法的一部分?

我正在尝试实现

派对类负责检测回合制战斗物。此外,每个缔约方都有成员(实体)和SelectionOrb(他们下面的小圈子)。当一方成员去世时,必须选择新成员。通过成员选择过程,SelectionOrb必须接收新的父(AdjustWorldObject())以及必须分配对所选成员的引用(对于战斗内容)。如果没有活动成员,我们需要将父设置为OnMemberDeath( ),以便SelectionOrb不会与Member对象一起删除。
在PlayerParty类中有新对象,即CombatUI,它的作用与SelectionOrb基本相同(必须在当前死亡后接收新的父对象)。希望这很清楚:)。

null

1 个答案:

答案 0 :(得分:5)

  

是否可以仅覆盖部分方法?

不,这是不可能的。您需要将需要重写的函数部分提取到新的virtual方法中。

例如,如果仅从此方法调用AdjustWorldObjectResetWorldObject,则可以将其设置为虚拟并在需要时覆盖,如此

class Party
{
    protected void OnMemberDeath( )
    {
        if(aliveCount > 1)
        {
            AdjustWorldObject();
            aliveCount--;
        }
        else
        {
            ResetWorldObject();
            if(OnPartyDeath != null) OnPartyDeath(); // Event
            else print( "Party died but event had no subscriptions!" );
        }
    }
    protected virtual void AdjustWorldObject()
    {
        // ...
    }
    protected virtual void ResetWorldObject()
    {
        // ...
    }
}

class PlayerParty : Party
{
    protected override void AdjustWorldObject()
    {
        base.AdjustWorldObject();
        AdjustCombatUI();
    }
    protected override void ResetWorldObject()
    {
        base.ResetWorldObject();
        ResetCombatUI();
    }
}

如果不是,您可以创建类似的专用虚拟方法。