繁体   English   中英

从超类 C# 访问子类方法

[英]Accessing subclass method from superclass C#

所以我知道我实际上不能从它的父类访问子类的方法和属性。 但我有一个程序将车辆存储在数组中(不是 arraylist - 它的作业)。 然后,车辆初始化为从车辆 class 派生的飞机、船或汽车 object。 这些子类具有独特的属性,我想知道 go 如何访问这些?

这是一些(简化的)相关代码:

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)

我该如何解决这个问题? 我已经研究了几个小时,但我被这个问题难住了。

谢谢:)

您可以通过其声明的类型访问引用。 因为您将数组声明为Vehicle ,所以您不能直接访问子类成员。

为此,将 object 与包含它的集合分开初始化:

var jet = new Airplane();
jet.Make = "Boeing";
jet.Engine = "Jet";

vehicles[0] = jet;

或者,使用 object 初始化程序:

vehicles[0] = new Airplane
{
    Make = "Boeing",
    Engine = "Jet"
};

在实例化它之后将其强制转换是非常荒谬的,但你也可以这样做:

vehicles[0] = new Airplane();
((Airplane)vehicles[0]).Make = "Boeing";
((Airplane)vehicles[0]).Engine = "Jet";

铸造解决了我的问题:

((Airplane)vehicles[currentItem]).EngineType = "Jet";

// Rather than

vehicles[currentItem].EngineType = "Jet";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM