首页 > 解决方案 > C#:如何使用对父类的引用来访问子类?

问题描述

所以我有一个名为 的抽象类Item,从它继承的是一个名为 的类Food,以及其他也可以视为武器和服装等物品的类。

我正在尝试让 NPC 在我正在研究的游戏中循环浏览他们的库存 ( List<Item>) 以找到可以吃的食物,但除非他们知道这是食物而不是食物,否则他们将无法吃东西剑或帽子。

所以我想像这样的东西if (inventory[i].GetType () == Food)会告诉他们它是否可以食用,但是既然我确定它是食物,我如何获得对 Food 类实例的引用?谢谢

标签: c#

解决方案


一次执行两者(检查和获取类型化引用)的一种高效方法是使用as运算符:

foreach (var item in items)
{
    var food = item as Food;
    if (food != null)
    {
         // do whatever special things can be done with food, e.g. add an "Eat" item to some context menu
    }
}

尽管如此,实现这一目标的更好方法可能是利用多态性。继续使用上下文菜单示例,您的Item基类必须有一个虚拟方法,例如AddMenuItems,并且该方法会在您的每个项目上调用。

然后Food该类可以覆盖该方法以将“Eat”项添加到其他类型的项没有的菜单中。


推荐阅读