C#-调用我在另一个类中创建的类
我的程序中有3个类:程序、棋盘和方块。C#-调用我在另一个类中创建的类,c#,C#,我的程序中有3个类:程序、棋盘和方块。 在程序中,我正在创建一个新的板: class Program { static void Main(string[] args) { Board b = new Board(); } } 现在我正在寻找一种方法来调用我在Square类中创建的Board。 有人知道怎么做吗?(不在Square类中创建新板)。 编辑: 我正在尝试创建一个简单的扫雷游戏。 在Board类中,我有一个二维正方形数组。然后我在正方形阵列的每
在程序中,我正在创建一个新的板:
class Program
{
static void Main(string[] args)
{
Board b = new Board();
}
}
现在我正在寻找一种方法来调用我在Square类中创建的Board。有人知道怎么做吗?(不在Square类中创建新板)。
编辑:
我正在尝试创建一个简单的扫雷游戏。
在Board类中,我有一个二维正方形数组。然后我在正方形阵列的每个部分创建一个新的正方形。然后,电路板使用Square类中的“AddMine”函数创建地雷。我删除了董事会选择将哪个正方形设置为矿山的方式
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();
}
}
真正的问题是如何在正方形类中调用board类中的board数组?由于这种方法不起作用,我得到了一个“System.NullReferenceException”错误,我知道这是因为b被设置为“null”,但我不知道该怎么做才能在Program类中从Main中看到电路板。我在互联网上找到的所有答案都是或设置一个新板,或在squarwe类中设置一个prorame类,但因为我在静态函数中设置一个新板,所以它不起作用。
感谢所有人的帮助,我希望现在问题更清楚。使用传递对象引用作为方法中的参数,您可以实现所需的输出。以下是一个例子:
class Program
{
static void Main(string[] args)
{
Board d=new Board();
Square s=new Square();
s.m1(d);
}
}
class Board
{
int x=10;
}
class Square
{
public void m1(Board a)
{
Console.WriteLine(a.x);
}
Console.ReadLine();
}
正如许多人所说的,你需要把对董事会的引用传递到广场上。在你的例子中几乎都有,你只是没有通过董事会 下面是您的square类的外观
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
}
}
您收到空引用异常,因为您从未实际设置board对象,因此在尝试使用它时它为空
然后编辑你的电路板示例,这是你添加新方块的方式
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();
}
}
课程板
{
公众广场[,]委员会;
公共int n;
公共委员会()
{
Console.Write(“在列(int)上输入行数):”;
n=int.Parse(Console.ReadLine());
板=新正方形[n,n];
矿山=(n*n)/6;
for(int row=0;row
“this”键盘只是对调用对象的引用
这应该可以解决您的问题,但我应该指出,这通常不是最佳做法。看起来您正朝着紧密耦合类的方向前进,这很容易导致代码难闻且无法维护。您应该研究紧耦合与松耦合代码。一个快速的谷歌搜索找到了这篇文章
我没有看到“我在Square类中创建的板”。我只看到一个程序类。有不同的方法可以做到这一点。你试过什么?一般来说。。。将其传递给方法参数。Square类的代码在哪里?如果不想创建实例,可以创建
静态
方法创建Square
类的实例时,通过方法或属性将Board
的此实例传递给它。反之亦然。如果一个Board
有64个Square
s,它可能应该自己创建它们。^^或者使用一个单独的Board builder classI需要从整个类中访问数组,而不仅仅是在一个函数中(请参见我的adit)。当我试图按照您的建议在Square类中写入“b=Board;”时,我得到一个错误“名称‘board’在当前上下文中不存在”怎么办?无论如何,感谢您的帮助!您是否记得将其添加到构造函数中的参数中?public Square(board-board,int-row,int-col)我不知道为什么,但是当我重写您建议的内容时,它现在可以工作了。谢谢!
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();
}
}