C#如何从父列表访问继承的对象

时间:2012-06-24 17:41:44

标签: c# list object parent inherited

我正在尝试找到一种方法来创建具有各种继承对象的父对象列表。这是一个例子。

class Prog {
    public Prog ( ) {
        List<Shape> shapes = new List<Shape>();
        shapes.Add( new Cube() );
        shapes.Add( new Shape() );

        //All those ways will not work, I cannot figure a way how to do this
        shapes[0].CubeFunction(); 
        (Cube)shapes[0].CubeFunction();
        Cube cube = shapes[0];
    }
}

class Shape {
    public Shape (){}
}

class Cube : Shape {        
    public Cube (){}
    public void CubeFunction(){}
}

有谁知道如何让Prog类中的代码工作?

2 个答案:

答案 0 :(得分:6)

你的演员版本几乎是正确的 - 因为优先级,它只是错误的。你需要:

((Cube)shapes[0]).CubeFunction();

可替换地:

Cube cube = (Cube) shapes[0];
cube.CubeFunction();

这样做的需要通常是一种设计气味,请注意 - 如果你能避免它,那么值得尝试这样做。

答案 1 :(得分:5)

如果你不确定演员表是否有效并且不想抛出InvalidCastException,你可以这样做:

Cube cube = shapes[0] as Cube;
if (cube == null)
{
    // cast is not valid
}
else
{
    cube.CubeFunction();
}