【发布时间】:2020-07-19 06:54:55
【问题描述】:
我正在开发一款游戏,但在访问我的任务系统的类字段时遇到问题。在这个系统中,任务可以有多个目标,目标可以是不同的类型。所以在这个例子中,我有一个名为“Ultimate Fetch”的获取任务,有两个获取目标,每个获取目标都与一个项目 ID 相关联。我无法访问商品 ID。
任务类如下所示:
public class Quest
{
public List<Goal> goals { get; set; } = new List<Goal>();
public string QuestName { get; set; }
public string description { get; set; }
public int XpReward { get; set; }
public bool completed { get; set; }
}
目标类如下所示:
public class Goal
{
public Quest Quest { get; set; }
public string description { get; set; }
public bool completed { get; set; }
public int currentAmount { get; set; }
public int requiredAmount { get; set; }
}
FetchGoal 类如下所示:
public class FetchGoal : Goal
{
public int itemId { get; set; } //<-- I'm having issues accessing this
public FetchGoal(Quest quest, int _itemId, string _description, bool _completed, int _currentAmount, int _requiredAmount)
{
this.Quest = quest;
this.itemId = _itemId;
this.completed = _completed;
this.description = _description;
this.currentAmount = _currentAmount;
this.requiredAmount = _requiredAmount;
}
}
Fetch Quest 类如下所示:
public class UltimateFetchQuest : Quest
{
public UltimateFetchQuest()
{
QuestName = "Ultimate Fetch";
description = "Fetch Stuff!!";
XpReward = 100;
goals.Add(new FetchGoal(this, 0, "Fetch 5 things", false, 0, 2));
goals.Add(new FetchGoal(this, 1, "Fetch 2 widgets", false, 0, 2));
}
}
为了简单起见,我只有一个按钮来尝试访问该字段,如下所示:
UltimateFetchQuest FetchQuest = new UltimateFetchQuest();
private void button1_Click(object sender, EventArgs e)
{
List<Goal> lstGoals = FetchQuest.goals;
int intItemId = lstGoals[0].itemId; // <-- This does not work
}
按钮点击事件的第二行无效。我认为这是因为我正在访问目标列表,而不是 fetchgoals。让我困惑的部分是当我调试程序时,我可以使用智能感知看到该字段:
似乎有访问它的路径,但正如您在此处看到的,我不能:
感谢任何帮助!
【问题讨论】:
-
提示:如果
lstGoals包含不是FetchQuest的内容,你期望会发生什么?你说过“这是一个目标列表——任何类型的目标都可以。”FetchQuest只是 一种 目标 - 其他人可能没有itemId属性。 -
嗯,这很好。我想这是有道理的。
-
调试时,
Goal显示为其最具体的类型:FetchGoal。在button1_Click中,您以Goal的身份访问每个项目,这就是您无法访问itemId的原因。
标签: c# class inheritance