如何强制派生类实现静态属性或字段?

时间:2016-01-10 12:42:27

标签: c# inheritance class-structure

这是我的抽象类:

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; }
    }
}

先生。编译器说我不能使成员HEALTH在敌人类中保持静态和抽象。

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

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

1 个答案:

答案 0 :(得分:5)

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; }
    }
}