1

我正在尝试找到一种方法来制作包含各种继承对象的父对象列表。这是一个例子。

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 类中的代码工作?

4

2 回答 2

6

您的演员表几乎是正确的-只是因为优先级而出错。你需要:

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

或者:

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

请注意,像这样进行投射的需要通常有点设计味道 - 如果你可以避免它,那么值得尝试这样做。

于 2012-06-24T17:43:10.970 回答
5

如果您不确定强制转换是否有效并且不希望抛出InvalidCastException,您可以这样做:

Cube cube = shapes[0] as Cube;
if (cube == null)
{
    // cast is not valid
}
else
{
    cube.CubeFunction();
}
于 2012-06-24T17:58:31.520 回答