关于C#:用虚拟函数重写抽象函数?

override an abstract function with a virtual one?

基本上,我是在问如何根据我想做的来正确地做这件事。

我有一个武器类,它是抽象的,因为它包含像fire()这样的方法,这些方法在如何发射时非常通用(激光和子弹),它们需要继承器实现。

然而,一旦我得到一个真正的弹道武器类继承自武器类。

好吧,这些火大多数都是一样的。他们产生炮弹,降低弹药数量,等待重新装填计时器降到0,然后再允许开火。

无论是坦克炮、手枪、炮塔还是火炮,它都将保持不变,而不仅仅是变化。

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

但基本上我想

抽象武器类fire()方法

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

但似乎您不能重写一个抽象方法并使其成为虚拟方法。

但我不想有一个全新的方法,因为我想

武器火

除非特定的弹道武器已经超越了一般的方法,否则它将进入弹道武器并使用那里的实现。


抽象意味着它必须在子类中被重写,而虚拟意味着它可以被重写。抽象类中可以有虚拟方法。您可以通过以合同的形式绑定接口来解决您的问题,例如:

1
Ifireable

也许你可以这样做:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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()
    {

    }
}