Mun*_*ta0 1 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(){}
}
Run Code Online (Sandbox Code Playgroud)
有谁知道如何让Prog类中的代码工作?
你的演员版本几乎是正确的 - 由于优先权,它只是错误的.你需要:
((Cube)shapes[0]).CubeFunction();
Run Code Online (Sandbox Code Playgroud)
或者:
Cube cube = (Cube) shapes[0];
cube.CubeFunction();
Run Code Online (Sandbox Code Playgroud)
像这样投射的需要通常是一种设计气味,请注意 - 如果你能避免它,那么值得尝试这样做.
如果你不确定强制转换是否有效并且不想抛出InvalidCastException,你可以这样做:
Cube cube = shapes[0] as Cube;
if (cube == null)
{
// cast is not valid
}
else
{
cube.CubeFunction();
}
Run Code Online (Sandbox Code Playgroud)