【发布时间】:2011-09-21 21:55:05
【问题描述】:
请帮我建立对象模型。
我需要抽象类Unit 代表游戏中的每个军事单位。有Soldier、Tank、Jet 和Bunker(单位的孩子)。他们每个人都有int属性Count和Defense,带有单个int count参数的构造函数和一个方法GetTotalDefense。
我的想法如下。
private abstract class Unit
{
private int Count { get; set; }
private const int Defense = 0;
protected Unit(int count)
{
Count = count;
}
public int GetTotalDefense()
{
return Count * Defense;
}
}
private class Tank : Unit
{
private const int Defense = 5;
}
每个单元有不同的Count和不同的Defense。构造函数的主体和GetTotalDefense 的主体始终相同。 我需要的是在子类中覆盖Defense,因为每个单元都有不同的。此属性应为 const,所有 Tank (Soldier, ...) 实例具有相同的防御。是否有可能继承 const 属性或者每个孩子都需要自己的 const Defense 属性?
这是我想要实现的示例。
哦,还有部队类
public class Troop
{
private Soldier Soldiers { get; set; }
private Tank Tanks { get; set; }
private Jet Jets { get; set; }
private Fort Forts { get; set; }
public Troop(int soldiers, int tanks, int jets, int forts)
{
Soldiers = new Soldier(soldiers);
Tanks = new Tank(tanks);
Jets = new Jet(jets);
Forts = new Fort(forts);
}
public int GetTotalDefense()
{
return Soldiers.GetTotalDefense() + Tanks.GetTotalDefense() + Jets.GetTotalDefense() + Forts.GetTotalDefense();
}
}
另外,欢迎提出更好的解决方案,谢谢。
PS:我对访问修饰符非常严格,所以你的例子要准确,谢谢。
【问题讨论】:
-
如果每个访问修饰符上都有
get; set;,为什么还要严格控制访问修饰符? -
请解释一下。什么时候是私有的,不需要get;设置;?
-
我认为glowcoder他说如果你有一个属性的get和set,你可以在那里进行验证,那么为什么你需要严格呢?你也知道你可以做
public int Count {get; private set;}吗?获取公开可读、可私写的属性?
标签: c# oop inheritance abstract-class