我正在制作一个游戏,其中我有多种士兵,每种都有自己的属性(速度,攻击力......) . 显然,所有这些都可以走路,攻击......所以我认为用这些方法创建一个抽象类Soldier,以及每个单元属性的子类都是合适的 . 问题是我不能在基础类中使用派生类的属性 .
简单的方法可能是在派生类中实现方法,但这意味着许多重复的代码,我想避免它 . 实际上,这会使基类不必要 .
我尝试过几件事 . 据我所知,我尝试的最接近的解决方案是使用抽象/虚拟属性,但我再次复制每个单元类型的“获取”代码 . 也许这是无法避免的,但我想,如果可能的话 .
肯定存在一个我没有想过的简单解决方案 . 有任何想法吗?
我想这样的想法:
public abstract class Soldier {
public int AttackPower {
get { return this.power; }
}
public Attack {
Console.WriteLine("Attacked with "+AttackPower+" attack power");
}
}
public class Lancer:Soldier {
int power=5;
}
public class Archer:Soldier {
int power=10;
}
当然,这不是一个正确的解决方案,因为Soldier类不知道“power”变量,但如果我在Soldier类中声明“power”变量,我会收到错误,因为字段名称是重复的 .
任何帮助将不胜感激 .
2 回答
为什么不在基类中放置
Power
属性?一些设计评论:
您是否需要
Archer
和Lancer
的不同类,或者它们只是Soldier
s配置不同?最好从数据源中提取这样的属性值,而不是在源代码中对它们进行硬编码 . 您可以嵌入XML文件或其他内容,因此不容易编辑 .
你需要一个抽象的属性:
如果您真的发现了"GetPower"方法,如果基类方法需要访问数据,则必须在基类中声明该数据 .
它不是代码重复,它的类型安全!