一个简单的问题......
我有一个抽象类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)
这是唯一(并且正确的方式)这样做)?
不,您只需要使用括号来明确您希望演员要应用的内容:
((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)