c# - Foreach 多态性
问题描述
我正在编写一个简单的 rpg 游戏以在 C# 中进行一些练习,但我遇到了一个问题。我在使用 foreach 时无法访问子参数。有没有办法不对每种类型使用两个不同的列表并保留在基本类型的列表中?
class A{}
class B : A{public int hp=5}
class C : A{public int hp=10}
List<A> d = new List();
d.Add(new B());
d.Add(new C());
foreach(A a in d){
a.hp--; //does not see 'hp'
}
解决方案
一种解决方案是拥有B
并C
实现一个通用接口,然后将列表更改为该类型。
例如
public interface IHasHealth
{
int hp { get; set; }
}
public class A{}
public class B : A, IHasHealth
{
public int hp { get; set; } = 5;
}
public class C : A, IHasHealth
{
public int hp { get; set; } = 10;
}
public void Main(){
List<IHasHealth> d = new List<IHasHealth>();
d.Add(new B());
d.Add(new C());
foreach(IHasHealth a in d){
a.hp--;
}
}
推荐阅读
- list - Kotlin/Firebase 获取对象列表
- .net - 为什么 NumberStyles.Any 不允许使用百分号?
- scala - 错误外壳:397 - 无法在 hadoop 二进制路径中找到 winutils 二进制文件
- fasterxml - jackson-dataformat-yaml 中的snakeyaml.util 包移到了哪里
- macos - Fabric 链码实例化失败
- android - 如何在 Android OpenCv 中加载 cascadeClassifier
- internationalization - Web SQL 查询返回的行数与 SQL 企业管理器查询不同
- excel - 如何在Excel中将文本转换为日期和时间
- python - 使用 Splinter 在表单中输入字符串
- sql - 我怎么知道flutter sqflite中是否存在行?