C# 构造函数中的方法重复

C# 构造函数中的方法重复,c#,C#,我只想要一次“炸弹专家(anzahlMinen)”,我该怎么写,它不会每一轮都产生新的炸弹 public Game(int anzahlMinen, int xeingabe, int yeingabe) { _minenArray = new int[5, 5]; _emptyArray = new int[5, 5]; _boolArray = new bool[5, 5]; program = new Program(); zeichnen = new Draw();

我只想要一次“炸弹专家(anzahlMinen)”,我该怎么写,它不会每一轮都产生新的炸弹

public Game(int anzahlMinen, int xeingabe, int yeingabe)
{
  _minenArray = new int[5, 5];
  _emptyArray = new int[5, 5];
  _boolArray = new bool[5, 5];
  program = new Program();
  zeichnen = new Draw();

  BombenGenerieren(anzahlMinen);
  FillPlayMap();
  Umdreher(yeingabe, xeingabe);
  zeichnen.OpenField(_minenArray, _boolArray);
  //SeenMap();

}

基本上,使用
布尔
变量跟踪
bombengerieren
的执行

boolean bombenGeneriert = false;

public Game(int anzahlMinen, int xeingabe, int yeingabe) {
    //...

    BombenGenerieren(anzahlMinen);

    //...
}

public void BombenGenerieren(int minen) {
    if (!bombenGeneriert) {
        bombenGeneriert = true;

        //the rest of your code in this method
    }
}
这将在第一次执行该方法时将
bombenGeneriert
设置为true。现在,每次执行时,它都会检查
!bombenGeneriert
将计算为
false

boolean bombenGeneriert = false;

public Game(int anzahlMinen, int xeingabe, int yeingabe) {
    //...

    BombenGenerieren(anzahlMinen);

    //...
}

public void BombenGenerieren(int minen) {
    if (!bombenGeneriert) {
        bombenGeneriert = true;

        //the rest of your code in this method
    }
}

此外,你应该考虑重新排列你的代码。我怀疑您多次调用

Game()
,因此您可能应该将
BombenGenerieren()
方法重新定位到
Game()
之外的某个地方

boolean bombenGeneriert = false;

public Game(int anzahlMinen, int xeingabe, int yeingabe) {
    //...

    BombenGenerieren(anzahlMinen);

    //...
}

public void BombenGenerieren(int minen) {
    if (!bombenGeneriert) {
        bombenGeneriert = true;

        //the rest of your code in this method
    }
}
如果
Game
是你的
Game()
a构造函数,那么
bombenGeneriert
必须是静态的:

static boolean bombenGeneriert = false;

我假设
Game
是一个构造函数,您希望执行
BombenGenerieren
一次并在实例之间共享它

您应该做的是将
BombenGenerieren
设置为静态,并将
BombenGenerieren
的效果存储在一个或多个静态字段或属性中。在实例化新的
Game
对象之前,您应该调用
Game.bombengerieren
,或者创建一个静态构造函数,如下所示:

public static Game()
{
    BombenGenerieren(anzahlMinen);
}
静态构造函数将在您第一次使用
游戏
类型时执行。请注意,它不接受参数,因此anzahlMinen必须是一个常数。如果这是一个问题,使用常规静态方法


另一种方法是将
BombenGenerieren
方法的结果封装在一个对象中,并将其传递给
Game
构造函数,这样可以将结果应用于每个新类。

我认为还需要一些上下文。这个物体是如何使用的?何时调用构造函数?只需定义一个
bool
,并在第一次调用后将其设置为
false
。之后,如果
bool
为真,则只执行
BombenGenerieren
。我相信我们在这里看到的是一个构造函数,因此建议的布尔值每次初始化为
false
。这没有什么区别。无论如何,构造函数只运行一次,那么为什么检查是否已经运行会有用呢?@Rik,你说得对。核心问题是“每一轮”都会调用
newgame()
bombenGeneriert
需要是
静态的
。只要阅读问题的注释即可。如果
Game
确实是一个构造函数,那么它只需要是静态的。如果
bombengeriert
是静态的,那么无论
bombengerieren
的结果是什么,都应该以某种方式保存在当前实例之外。