我想浏览一列不同对象的列表,这些对象都是从同一父类的子类派生的,并且无论如何我只想使用父类的东西。
public class Foo{ public int a=0; }
public class Bar : foo{ }
public class Gun : foo{ }
public class Shotgun : Gun{ }
public class Rifle : Gun{ }
那我以后要做什么:
object[] Array ={new Bar(),new Shotgun(),new Rifle()};
int index=0;
foreach(SubclassOfFoo obj in (Array as SubclassOfFoo[]))
{
(Array[index] as SubclassOfFoo).a++;
Console.WriteLine(obj.a);
index++;
}
希望有一些方法可以做到这一点。
答案 0 :(得分:2)
我将为基类Foo
而不是object
创建一个集合
List<Foo> array = new List<Foo>();
array.Add(new Bar());
array.Add(new Shotgun());
array.Add(new Rifle());
那么您可以直接使用集合而无需强制转换。
foreach(Foo obj in array)
{
Console.WriteLine(obj.a);
index++;
}
答案 1 :(得分:2)
我建议声明父类型的数组:
Foo[] Array =new Foo{new Bar(),new Shotgun(),new Rifle()};
这种方式不需要强制转换:
foreach(Foo obj in Array))
{
obj.a++;
Console.WriteLine(obj.a);
}
由于所有子类都继承自Foo
或Foo
的子代,因此此数组可以容纳所有子代和孙代。
每个子类将具有属性a
。无需铸造