C#:定义基类中的方法实现和派生类中的属性
我正在做一个游戏,我有很多种士兵,每种都有自己的属性(速度,攻击力…)。显然,他们都能走路,攻击。。。所以我认为用这些方法创建一个抽象类,并用每个单位属性创建子类是合适的。问题是我不能在基类中使用派生类的属性 简单的方法可能是在派生类中实现方法,但这意味着会有大量重复的代码,我希望避免这种情况。事实上,这会使基类变得不必要 我试过几种方法。据我所知,我尝试的最接近的解决方案是使用抽象/虚拟属性,但我还是会为每种单元类型复制“get”代码。也许这是不可避免的,但如果可能的话,我愿意 肯定存在一个我没有想到的简单解决方案。有什么想法吗 我想到一些像这样的想法:C#:定义基类中的方法实现和派生类中的属性,c#,inheritance,abstract,C#,Inheritance,Abstract,我正在做一个游戏,我有很多种士兵,每种都有自己的属性(速度,攻击力…)。显然,他们都能走路,攻击。。。所以我认为用这些方法创建一个抽象类,并用每个单位属性创建子类是合适的。问题是我不能在基类中使用派生类的属性 简单的方法可能是在派生类中实现方法,但这意味着会有大量重复的代码,我希望避免这种情况。事实上,这会使基类变得不必要 我试过几种方法。据我所知,我尝试的最接近的解决方案是使用抽象/虚拟属性,但我还是会为每种单元类型复制“get”代码。也许这是不可避免的,但如果可能的话,我愿意 肯定存在一个我
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”变量,我会得到一个错误,因为字段名是重复的
任何帮助都将不胜感激。您需要一个抽象属性:
public int AttackPower {
get { return this.power; }
}
protected abstract int Power { get; }
public class Lancer:Soldier {
protected override int Power { get { return 5; } }
}
如果您确实不喜欢属性,也可以使用“GetPower”方法。正如您所发现的,如果基类方法需要访问数据,则必须在基类中声明该数据
它不是代码复制,它的类型安全 为什么不在基类中放置一个
Power
属性呢
public abstract class Soldier {
public int Power {get; set;}
public int AttackPower {
get { return this.Power; }
}
public Attack {
Console.WriteLine("Attacked with "+AttackPower+" attack power");
}
}
public class Lancer:Soldier {
public Lancer()
{
Power = 5
}
}
public class Archer:Soldier {
public Archer()
{
Power=10;
}
}
一些设计意见:
- 您是否需要为
和Archer
使用不同的类,或者它们可以是配置不同的Lancer
sSoldier
- 最好从数据源中提取这样的属性值,而不是在源代码中硬编码它们。您可以嵌入一个XML文件或其他不易编辑的东西