【发布时间】:2019-01-12 21:26:02
【问题描述】:
我正在编写一个简单的 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'
}
【问题讨论】:
-
阅读全文series,它将帮助您在 c# 和 rpg 游戏中走上正轨。
-
回答您的问题,
List<T>的类型T应该是您可以用来利用所需共性的类型,否则您的多态性将毫无用处。在您的情况下,A似乎不是正确的类型。您要么缺少B和C的通用基本类型或接口。 -
变量
a的类型为A。A是否有hp属性?不...如果您希望A(以及从A派生的所有类型)应该具有公共hp属性,请将hp设为A的属性,而不是B或@987654338 的属性@... -
@elgonzo 'A' 在我的项目中有很多重要的东西,包括 'hp',这只是一个例子。
-
您的问题清楚地表明
A没有hp属性/字段。此外,您提到的错误/问题a.hp--不能“看到”表明A没有hp属性/字段(或者该属性可能是受保护的/私有的)。如果您对某些代码提出问题,则问题中的代码示例应反映代码的实际情况。避免像瘟疫一样在您的示例代码中创建一个在问题上下文方面与您的真实代码显着不同的场景。
标签: c# inheritance polymorphism