在大学里我有任务要做。我有如下简单的程序。我有一个代表人的父类,以及几个继承它并代表角色(弓箭手、骑士、巫师)的子类。
我必须实现轻松切换对象类型的功能,从弓箭手到骑士等等。
起初我想过用所有独特的方法创建一个大接口,但这打破了SOLID规则,但我不能打破这个规则。
有人可以帮忙解答一下吗?
代码如下:
public abstract class Person
{
public String Name;
public char Age;
void describe()
{
//some code
}
}
角色类别:
public class Archer : Person
{
public int agility;
public void describe()
{
//some code
}
public void fightUsingBow()
{
//some code
}
}
下一个角色:
class Wizard : Person
{
public int mana;
public void describe()
{
//some code
}
public void castASpell()
{
//some code
}
}
你不能只是将弓箭手“切换”为骑士。弓箭手不是骑士。您可以使用与弓箭手相同的基本属性来创建一个“新”骑士,但没有内置的方法可以做到这一点。一种方法是对一个人使用“复制构造函数” - 类似于:
public Person(Person basePerson)
{
this.Name = basePerson.Name;
this.Age = basePerson.Age
}
然后向
Knight
添加一个调用复制构造函数的构造函数:
public Knight(Person basePerson) : base(basePerson) {}
例如: 将
FightUsingBow()
CastASpell()
更改为 Attack()
或 SpecialAttack()
如果需要,您可以为它们创建一个抽象类。例如 Guardian
与父类
Person
abstract class Guardian : Person
{
public abstract void Attack();
}
为您的监护人使用 Guardian 类。
接受 Person 和 dest 对象类型作为输入。 并将尽可能多的人的属性附加到最终的专业人员。
可以通过不同的策略来减轻转换背后潜在的数据丢失。