这是我的抽象类:
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在敌人类中保持静态和抽象。
我的目标是强制每个子类都有一个静态或常量字段,可以从父类访问。
有解决方案吗?如果没有,那么最优雅的解决方法是什么?使财产非静态?
答案 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; }
}
}