c# – 基类和显式类型检查的空方法

假设您有两种类型的对象,一种是从另一种派生而来的,但却添加了一个额外的功能.我可以想到处理这个额外功能的两种方法是在基类上添加一个空方法,该方法总是被调用(派生类可以覆盖此方法)或显式类型检查以查看是否有派生类的实例然后调用额外的方法.

这两个看起来都像黑客,有更好的方法吗?如果不是一个优先于另一个?两种方式都可以工作,但似乎都不是特别干净,一种方法是使用无用的方法存根来污染基类,另一种方法是使用显式类型检查,这通常被认为是一个坏主意.

这是一个清楚我的意思的例子:

public class Weapon
{
    // Should there be an empty StartCharging() here?

    public virtual void Fire()
    {
        // Do something
    }
}

public class ChargedWeapon : Weapon
{
    public void StartCharging()
    {
        // Do something
    }

    public override void Fire()
    {
        // Do something
        base.Fire();
    }
}

public class Game
{
    private Weapon weapon;

    public void HandleUserInput()
    {
        if (MouseButton.WasPressed())
        {
            // Or should there be an if (weapon is ChargedWeapon) here
            weapon.StartCharging();
        }
        else if (MouseButton.WasReleased())
        {
            weapon.Fire();
        }
    }
}

最佳答案 最好将方法添加到基类而不是进行类型检查.如果你做了一个类型检查,然后决定实施一种还需要充电的新型武器,会发生什么?你会增加另一个测试条件吗?

编辑:在你的代码中,我看到Strategy Pattern的实现的开始.我想你的用例将从它和State Pattern获得很大的好处.如果你需要更多关于这些的详细信息,请留下评论(因为它们有点偏离最初的问题的观点)

点赞