sb_*_*sb_ -1 c# oop subclass superclass
因此,我知道我实际上无法从其父级访问子类的方法和属性。但是我有一个程序可以将Vehicles存储在一个数组中(不是arraylist-它的作业)。然后将Vehicles初始化为从Vehicle类派生的飞机,船只或汽车对象。这些子类具有唯一的属性,我想知道如何去访问它们?
以下是一些(简化的)相关代码:
Vehicle[] vehicles = new Vehicle[20];
vehicles[0] = new Airplane();
// Setting an attribute of the superclass
vehicles[0].Make = "Boeing";
// Set an attribute from the Airplane class
vehicles[0].Engine = "Jet"; //(obviously this doesn't work)
Run Code Online (Sandbox Code Playgroud)
我该如何解决呢?我已经研究了几个小时,但是这个问题让我很困惑。
谢谢 :)
您可以通过其声明的类型访问引用。由于您将数组声明为Vehicle,因此无法直接访问子类成员。
为此,请与包含该对象的集合分开初始化该对象:
var jet = new Airplane();
jet.Make = "Boeing";
jet.Engine = "Jet";
vehicles[0] = jet;
Run Code Online (Sandbox Code Playgroud)
或者,使用对象初始化程序:
vehicles[0] = new Airplane
{
Make = "Boeing",
Engine = "Jet"
};
Run Code Online (Sandbox Code Playgroud)
在实例化之后立即将其返回是很荒谬的,但是您也可以这样做:
vehicles[0] = new Airplane();
((Airplane)vehicles[0]).Make = "Boeing";
((Airplane)vehicles[0]).Engine = "Jet";
Run Code Online (Sandbox Code Playgroud)