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

C# 如何强制派生类实现静态属性或字段?,c#,inheritance,class-structure,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 stat

这是我的抽象类:

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; }
    }
}
Compiler先生说,我不能在敌方类中将成员HEALTH设置为静态和抽象

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


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

静态和继承不能一起工作。您可以做的是创建一个可以在派生类中重写的虚拟属性。如果您愿意,您可以在
敌方
中提供一个基本实现,如果您不想:

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

静态
和继承不能一起工作。您可以做的是创建一个可以在派生类中重写的虚拟属性。如果您愿意,您可以在
敌方
中提供一个基本实现,如果您不想:

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

非常感谢。为什么静态和继承一起被视为有问题或不一致?这对我来说没有意义。@我自己谢谢你。为什么静态和继承一起被视为有问题或不一致?这对我来说没有意义