【发布时间】:2014-05-04 07:44:18
【问题描述】:
我有 3 个课程:"ChemDataChemicals(Super)"、"ChemDataAlcohol(Sub)、"ChemDataAcidBase"(Sub) 和包含所有对象的通用列表(类型:ChemDataChemicals)。我的超类包含我的大部分字段,但子类都包含一个额外的字段 - pH(十进制)和 VolPercentage(十进制)。
下面的代码应该在 ListBox 中添加 item.Name 和 item.VolPercentage/item.pH,但我无法访问我的子类中的字段。
foreach (ChemDataChemicals item in tmpChemDataChemicalsList)
{
if (item is ChemDataAlcohol)
{
listBox1.Items.Add(String.Format("{0}: {1}%", item.Name, (ChemDataAlcohol)item.VolPercentage));
}
else if (item is ChemDataAcidBase)
{
listBox1.Items.Add(String.Format("{0}: {1}M", item.Name, item.pH));
}
}
我尝试了一些强制转换,但似乎没有任何效果。 (Windows 窗体 - C#) 谢谢,
【问题讨论】:
-
IMO 你应该重新标记“非多态性”。哈哈。您应该在基类中添加一个抽象成员,例如“ToShortDescription()”,并在派生类中覆盖它。摆脱“项目是 XYZ”...
-
嗨阿德里亚诺。我对编程很陌生,刚刚开始了解 OOP。我认为,调用 obj 时使用超类引用的能力是多态性。换句话说,由于继承, chemDataAcidBase(sub) obj 是 chemDataChemical(super) obj。我误解了这个概念吗?谢谢
标签: c# list inheritance polymorphism