c# - C#:如何使用对父类的引用来访问子类?
问题描述
所以我有一个名为 的抽象类Item
,从它继承的是一个名为 的类Food
,以及其他也可以视为武器和服装等物品的类。
我正在尝试让 NPC 在我正在研究的游戏中循环浏览他们的库存 ( List<Item>
) 以找到可以吃的食物,但除非他们知道这是食物而不是食物,否则他们将无法吃东西剑或帽子。
所以我想像这样的东西if (inventory[i].GetType () == Food)
会告诉他们它是否可以食用,但是既然我确定它是食物,我如何获得对 Food 类实例的引用?谢谢
解决方案
一次执行两者(检查和获取类型化引用)的一种高效方法是使用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”项添加到其他类型的项没有的菜单中。
推荐阅读
- python - 在三个数组上优化现有的 for 循环
- sql - ORA-00942: 表或视图不存在 00942. 00000 - “表或视图不存在”
- angular - 从父组件访问子组件中的表单组
- javascript - 我可以在java中使用服务器回调中的javascript函数吗?
- c# - .NET Core 2.1 Windows 身份验证不识别角色成员身份
- android - 列表视图滚动时如何隐藏 BottomNavigationView
- python - Python 2 中装饰子类中的 super()
- ios11 - 顶部安全区域约束动画
- r - 在 R 中处理命名参数
- reactjs - React Native:为什么在另一个 flatList 的每个项目中渲染一个 flatList 都不能按预期水平工作?