我的课程有3门课程:课程,董事会和广场 在计划I中创建一个新的董事会:
class Program
{
static void Main(string[] args)
{
Board b = new Board();
}
}
现在我正在寻找一种方法来调用我在Square课程中创建的Board
任何人都有一个想法如何做到这一点? (不是在Square类中创建一个新的董事会)
编辑:
我试图创建一个简单的扫雷游戏
在Board类中,我有一个二维Squar数组。然后我在方阵的每个部分创建一个新的Square。然后董事会正在使用" AddMine" Square类中的函数。我已经删除了董事会选择哪个方块设置为矿井的方式。
class Board
{
public Square[,] board;
public int n;
public Board()
{
Console.Write("Enter the nuber of rows on column(int): ");
n = int.Parse(Console.ReadLine());
board = new Square[n, n];
mines = (n * n) / 6;
for (int row = 0; row < board.GetLength(0); row++)
{
for (int col = 0; col < board.GetLength(1); col++)
{
board[row, col] = new Square(row, col);
}
}
board[row, col].AddMine();
}
}
在Square类中,首先将val设置为0.之后我将调用&#34; AddMine&#34;从板上起作用,我需要在广场附近的每个广场的瓦尔上添加一个瓦片。
class Square
{
public Board b;
private int row, col;
public int val;
private bool open;
public Square(int row, int col)
{
this.row = row;
this.col = col;
open = false;
val = 0;
}
public void AddMine()
{
#region set this to bomb (-9), nearby squars ++
val = -9;
b.board[row, (col + 1)].val++;
#endregion
}
}
真正的问题是如何在Square类的Board类中调用board数组?因为这种方式不起作用,我得到了一个&#39; System.NullReferenceException&#39;错误,我知道这是因为b设置为&#39; null&#39;,但我不知道该怎么做,所以它将能够在Programe课程中看到Main的主板。
我在互联网上找到的所有答案都是或者设置一个新的Board,或者在squarwe类中设置一个prorame类,但是因为我在静态函数中设置一个新的板,它不起作用。 />
感谢任何人的帮助,我希望现在问题更加明确。
答案 0 :(得分:0)
使用传递对象引用作为方法中的参数,您可以实现您的期望输出。这是一个例子:
n
答案 1 :(得分:0)
正如许多人所说,你需要将参考板传递给广场。你几乎在你的例子中有它,你只是没有真正通过董事会。
这是你的方形类应该是什么样的。
class Square
{
public Board b;
private int row, col;
public int val;
private bool open;
public Square(Board board, int row, int col)
{
this.row = row;
this.col = col;
open = false;
val = 0;
**b = board;**
}
public void AddMine()
{
#region set this to bomb (-9), nearby squars ++
val = -9;
b.board[row, (col + 1)].val++;
#endregion
}
}
您收到了空引用异常,因为您从未实际设置过板对象,因此当您尝试使用它时它为null。
然后编辑您的电路板示例,这就是您添加新方块的方法。
class Board
{
public Square[,] board;
public int n;
public Board()
{
Console.Write("Enter the nuber of rows on column(int): ");
n = int.Parse(Console.ReadLine());
board = new Square[n, n];
mines = (n * n) / 6;
for (int row = 0; row < board.GetLength(0); row++)
{
for (int col = 0; col < board.GetLength(1); col++)
{
board[row, col] = new Square(this, row, col);
}
}
board[row, col].AddMine();
}
}
“this”keywoard只是对调用对象的引用。
这应该可以解决您的问题,但我应该注意到这通常不被认为是最佳做法。看起来你的方向是紧密耦合你的类,这很容易导致臭和不可维护的代码。您应该研究紧耦合与松散耦合的代码。快速谷歌搜索出现了这篇文章 http://www.c-sharpcorner.com/uploadfile/yusufkaratoprak/difference-between-loose-coupling-and-tight-coupling/