用虚拟的覆盖抽象函数?

时间:2013-04-30 03:05:36

标签: c# virtual abstract

基本上我会根据我想要的东西来询问如何做到最好。

我有一个抽象的武器类,因为它包含像Fire()这样的方法(激光与子弹),它们如何触发它们需要继承器实现。

然而,一旦我进入一个继承武器类的实际弹道武器类。

大多数人都是这样开火的。它们产生射弹并降低弹药数量并等待重新加载计时器降至0然后再次发射火焰。

无论是坦克炮还是手枪或炮塔或炮兵,它都会保持不变,而不仅仅是变化。

这似乎是一个虚拟类(鱼雷发射器可能需要一个特殊的实现来升高和降低一个舱门以便开火,所以它不能是非虚拟/抽象的,它需要可以修改)

但基本上我想拥有

抽象武器类Fire()方法

虚拟弹道武器继承武器Fire()方法

但似乎你无法覆盖抽象方法并使其成为虚拟方法。

我不认为我想要一个全新的方法,因为我希望能够做到

weapon.fire

它会进入弹道武器并使用那里的实施,除非特定的弹道武器已经覆盖了这种一般方法。

2 个答案:

答案 0 :(得分:1)

Abstract意味着必须在子类中重写它,其中virtual表示可以覆盖它。您可以在抽象类中使用虚方法。您可以通过以下合同形式绑定来解决您的问题,例如:

Ifireable 

答案 1 :(得分:0)

可能你可以这样做:

abstract class Weapon
{
    public abstract void Fire();
}

class BallisticWeapon
{
    virtual public void Fire()
    {
        // Ballistic fire
    }
}

// Weapon need ballistic fire
class WeaponA : BallisticWeapon
{
}

// Weapon don't need ballistic fire
class WeaponB : Weapon
{
    // Implement fire
    public void Fire()
    {

    }
}