一个简单的问题...

我有一个抽象类Cell和两个继承自Cell类的BorderCell和BoardCell类。然后,我有一个Cells数组,其类型为Cell [],其中包含BorderCell和BoardCell类型的对象。

abstract class Cell
{
}
class BorderCell : Cell
{
    public void Method1(){};
}
class BoardCell: Cell
{
    public void Method2(){};
}

...

Cell[] Cells = new Cell[x];
for (int i = 0; i < x; i++){
    Cells[i] = new BorderCell();
    // or
    Cells[i] = new BoardCell();
}


现在,我想将一个单元格强制转换为BorderCell并运行其Method1,如下所示:

(Border)Cells[i].Method1();


但这不起作用,我必须使用:

BorderCell borderCell = (BorderCell)Cells[i];
borderCell.Method1();


这是唯一(正确的方法)做到这一点吗?

最佳答案

不,您只需要括号即可清楚说明您要强制转换应用于的内容:

((Border)Cells[i]).Method1();


基本上是“。”绑定比强制转换更紧密,因此您的原始代码:

(Border)Cells[i].Method1();


等效于:

(Border)  (Cells[i].Method1());

关于c# - 如何从数组中转换对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3147929/

10-10 18:39