【发布时间】:2011-07-26 15:34:15
【问题描述】:
假设我有一个名为 BaseClass 的基类:
public BaseClase{
public bool isCool;
}
现在假设我有两个继承自 BaseClass 的类
public Class1: BaseClass{
public bool isGreen;
}
public Class2: BaseClass{
public bool isPurple;
}
现在假设我想通过创建一个列表来创建一个包含 Class1 和 Class2 实例的列表;
var genericList = new List<BaseClass>();
接下来,让我们将 Class1 和 Class2 的实例添加到 genericList。
genericList.Add(new Class1());
genericList.Add(new Class2());
现在,我有一个问题。如果我想访问 Class1.IsGreen 或 Class2.IsPurple,我必须将 genericList 中的每个项目转换为 Class1 或 Class2。
foreach(var item in genericList){
if(item is Class1){
var temp = (Class1) item;
temp.IsGreen = true;
}
if(item is Class2){
var temp = (Class2) item;
item.IsPurple = true;
}
}
这就是你应该做的事情吗?这对我来说似乎很笨拙,而且我正在编写的使用这种类型的代码结构的代码的复杂性已经失控了。我是继承的新手,想知道这是否只是你应该做的事情,或者是否有更好的选择。
【问题讨论】:
-
除非您仅想解决如何迭代这个类层次结构的确切示例,否则您必须更具体地了解您的特定域才能告诉您是否你做出了最好的选择。
-
看起来您可能想要一个在每个类中具有不同实现的方法(多态性)。然后,您可以为列表中的每个项目调用相同的方法。
标签: c# inheritance