如何从每个基类的继承类中调用属性
本文关键字:继承 调用 属性 基类 | 更新日期: 2023-09-27 18:01:04
我真的不知道这是否可能,但如果可能的话就太好了。因此,在我的角色扮演游戏中,我试图实现一些其他可能的任务计划(直到知道只有怪物狩猎任务的可能性,现在我想实现一些"与这个人交谈"-任务或"找到那个和那个物品"-任务(。所以我创建了一个新的任务类,将旧的任务类重命名为怪物任务,并从任务中继承了它。所以现在,我有了一个列表,我想遍历所有元素,直到我找到一个KilledMonsters高于3的元素。问题是,Killed Monster没有在基类中实现,而只在MonsterQuest类中实现:(
以下是目前的课程:
Quest
public class Quest
{
public int Accept_MinLevel { get; protected set; }
public string NPC_Name { get; protected set; }
public bool Accepted { get; protected set; }
public bool Completed { get; set; }
public bool HasStillRewards = true;
public double Reward_Experience { get; protected set; }
public int Reward_Money { get; protected set; }
public Quest(int accept_MinLevel, string npc_Name, double reward_experience, int reward_Money)
{
Accept_MinLevel = accept_MinLevel;
NPC_Name = npc_Name;
Reward_Money = reward_Money;
Reward_Experience = reward_experience;
}
public virtual void Update(GameTime gameTime)
{
}
public bool WaitForReward()
{
return Completed && HasStillRewards;
}
}
MonsterQuest
public class MonsterQuest : Quest
{
public List<Enemy> KilledEnemyList = new List<Enemy>();
public int RequiredMonster_Amount { get; private set; }
public string RequiredMonster_Name { get; private set; }
public int RequiredMonster_MinLevel { get; private set; }
public MonsterQuest(string npcName, int accept_MinLevel, string requiredMonster_Name, int requiredMonster_MinLevel, int requiredMonster_Amount, double reward_Experience, int reward_Money) : base(accept_MinLevel, npcName, reward_Experience, reward_Money)
{
NPC_Name = npcName;
Accept_MinLevel = accept_MinLevel;
RequiredMonster_Amount = requiredMonster_Amount;
RequiredMonster_MinLevel = requiredMonster_MinLevel;
RequiredMonster_Name = requiredMonster_Name;
Reward_Experience = reward_Experience;
Reward_Money = reward_Money;
}
public override void Update(GameTime gameTime)
{
if (KilledEnemyList.Capacity >= RequiredMonster_Amount)
Completed = true;
}
}
而且,正如我所说,我想这样做(来自另一个类。QuestList只是我添加了MonsterQuest元素的列表。这个片段是我的敌人类的一部分,只是为了注意^^(
foreach (var item in Storyline.QuestList.Where(c => c.Accepted && !c.Completed && c.RequiredMonster_Name == Name && c.RequiredMonster_MinLevel <= Level))
{
item.KilledEnemyList.Add(this);
}
我希望任何人都能理解我的问题,并能帮助我解决它:(祝你晚上愉快
总结这一点的最好方法可能是基类对继承它的类一无所知。它能做的最好的事情就是定义任何继承类都必须实现的某些签名。
一般来说,有几种方法可以解决这个问题。一种方法是使基类抽象化,定义其功能,以及每个派生类必须满足的一组抽象签名。在这种情况下,您将始终调用children类,但仍然可以在基类中重用公共代码。
另一种方法是创建一个接口,比如IKillable,然后让类全部实现它们。然后,您可以对IKillable对象进行调用。
我怀疑,寻找一些关于抽象类和接口的好教程会得到你所需要的。
希望这能让你开始。