如何从数组中转换对象

sve*_*vit 1 c# casting

一个简单的问题......

我有一个抽象类Cell和两个类BorderCell和BoardCell,它们继承自Cell类.然后我有一个Cell数组,其类型为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();
}
Run Code Online (Sandbox Code Playgroud)

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

(Border)Cells[i].Method1();
Run Code Online (Sandbox Code Playgroud)

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

BorderCell borderCell = (BorderCell)Cells[i];
borderCell.Method1();
Run Code Online (Sandbox Code Playgroud)

这是唯一(并且正确的方式)这样做)?

Jon*_*eet 7

不,您只需要使用括号来明确您希望演员要应用的内容:

((Border)Cells[i]).Method1();
Run Code Online (Sandbox Code Playgroud)

基本上是"." 绑定比演员更紧,所以你原来的代码:

(Border)Cells[i].Method1();
Run Code Online (Sandbox Code Playgroud)

相当于:

(Border)  (Cells[i].Method1());
Run Code Online (Sandbox Code Playgroud)