1

这是我的抽象类:

abstract class Enemy
{
    protected static abstract float HEALTH
    {
        get;
    }

    float health;

    void someMethod()
    {
        health = HEALTH;
    }
}

这是我的派生类:

abstract class BadGuy : Enemy
{
    protected override static float HEALTH
    {
        get { return 1; }
    }
}

编译器先生说我不能在 Enemy 类中使​​成员 HEALTH 既静态又抽象。

我的目标是强制每个子类都有一个可以从父类访问的静态或常量字段。

有解决方案吗?如果没有,最优雅的解决方法是什么?使属性非静态?

4

1 回答 1

6

static和继承不能一起工作。您可以做的是创建一个可以在派生类中覆盖的虚拟属性。如果您愿意,您可以在内部提供一个基本实现,或者如果您不想Enemy保留它:abstract

public abstract class Enemy
{
    protected abstract float Health { get; }
}

public class BadGuy : Enemy
{
    private const int BadGuyHealth = 1;
    protected override float Health
    {
        get { return BadGuyHealth; }
    }
}

public class EvenWorseGuy : BadGuy
{
    private const int WorseGuyHealth = 2;
    protected override float Health
    {
        get { return WorseGuyHealth; }
    }
}
于 2016-01-10T12:46:10.060 回答