使用基类的数组访问子类的属性

时间:2014-09-24 04:06:42

标签: c# properties unity3d

我在Unity编写游戏,遇到了访问子类属性的问题。

我有一个名为“Component”的基类,它只用于将继承它的所有子类组合在一起。我有一个“Track”类,它继承自具有一些公共属性的Component。

public class Track : Component {

    public int x;
    public int y;

}

另一个类保留一组Components并对其进行更改。

public class Example: MonoBehaviour {

    private Component[] components = new Component[10];

    void Start () {

        components[0] = new Track();
        components[0].x = 5; //Does not compile

    }
}

我不确定如何使用基类Component的数组访问Track中的属性。我感谢任何人都可以提供帮助。谢谢!

1 个答案:

答案 0 :(得分:3)

如果您确定它是Track,您可以将其投射到该类型:

components[0] = new Track();

((Track)components[0]).x = 5;

在这种情况下,您确定它是Track因为您刚刚实例化了它。

但是,如果可能的其他类也可以从Component继承,并且您的components集合可能没有Track的实例,那么您会想要在完成作业之前先检查一下。

var track = components[0] as Track;

if (track != null)
    track.x = 5;