C# - 调用我在另一个类

时间:2016-12-21 20:53:20

标签: c#

我的课程有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类,但是因为我在静态函数中设置一个新的板,它不起作用。 /> 感谢任何人的帮助,我希望现在问题更加明确。

2 个答案:

答案 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/