假设我有一个名为 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;
}
}
这就是您应该做事的方式吗?这对我来说似乎很笨重,而且我正在编写的使用这种代码结构的代码的复杂性已经失控。我是继承的新手,想了解这是否只是您应该做事的方式,或者是否有更好的选择。
最佳答案
这真的取决于你想做什么。如果您可以抽象出该属性,例如 IsSelected
,那么您可以将其作为虚拟或抽象属性公开在您的 BaseClass
上。这样您就不必在 for 循环中强制转换项目。
或者您可以将其抽象为抽象/虚拟方法,例如 UpdateColor(bool)
。然后每个派生类都可以覆盖它并为自己设置适当的属性。
还有其他几种替代方法,包括接口(interface)和扩展方法,您可以使用它们来使其更简洁。
关于c# - 将具有/相同基类的两个不同类放在同一个列表中的更好方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6832630/