簡體   English   中英

如何更改其他類中的變量?

[英]How do I change a variable from a different class?

我正在嘗試從其他類中的方法更改變量GameWeek,但無法使其正常工作。

在我的Game1構造函數中,創建類

public GameData currentGameData = new GameData();

我嘗試更改GameWeek變量的類是在Game1 Load方法中創建的:

startScreen = new StartScreen(this, globalVariables, currentGameData);

在StartScreen類中,我具有以下內容(構造函數+接下來的一兩行):

GameData thisGameData

public StartScreen(Game1 game, GlobalVariables globalVariables, GameData gameData)
      : base(game)
{
  this.thisGameData = gameData;

然后,我在startScreen類的方法中修改thisGameData:

thisGameData.GameWeek = 1;  //this doesn't work

但是,Game1類中的currentGameData尚未更改。 這似乎不足為奇,我的問題是我該如何去做呢? 據我了解,當您在構造函數中傳遞類時,僅傳遞了引用,因此,即使引用名稱不同,也不應將其指向同一位置(因為它們被設置為相同)。

我覺得我已經完全失去了情節/這里有些落后,但我無法弄清楚。

任何幫助,不勝感激!

GameData類供參考:

public int gameWeek;
public int GameWeek
{
  get { return gameWeek; }
  set
  {
    if (gameWeek > 52)
    {
      gameWeek = 0;
      gameYear += 1;
    }
    else
    {
      gameWeek = value;
    }
  }
}

public int gameYear;

編輯

為了澄清這個問題,我覺得我的措辭很好。

如果在我的Game1類中,我這樣寫:

currentGameData.gameWeek = 1;

然后就可以了。

我要實現的功能與之完全相同,但是可以從StartScreen類中進行。

如果我只是在StartScreen類中編寫以上代碼,則由於currentGameData不存在,因此顯然不起作用。

抱歉,之前的帖子輸入速度太快。

public int GameWeek
{
  get { return gameWeek; }
  set
  {
    if (value > 52) // value here was gameWeek.
    {
      gameWeek = 0;
      gameYear += 1;
    }
    else
    {
      gameWeek = value;
    }
  }
}

您是否還需要在調用代碼中執行某些操作來確定星期是否大於52? 例如,如果值是53,則您的代碼將在GameWeek屬性中工作,但是如果值達到54,則星期仍為0,年份又增加一。

編輯:響應海報的預期問題,即無法設置值並使它反映出來

我還沒有使用C#進行很多工作,但是似乎您需要一個引用參數來完成您要的內容,盡管這樣做似乎是一個壞主意。

startScreen = new StartScreen(this, globalVariables, ref currentGameData);


public StartScreen(Game1 game, GlobalVariables globalVariables, ref GameData gameData)
      : base(game)
{
  this.thisGameData = gameData;
  this.thisGameData.GameWeek = 1;
  // ...
}

順便說一句,您應該為我們添加更好的代碼片段,例如為我們提供整個包裝,如下所示:

// GameData class for reference:
class GameData {
  public int gameWeek;
  public int GameWeek
  {
    get { return gameWeek; }
    set
    {
      if (gameWeek > 52)
      {
        gameWeek = 0;
        gameYear += 1;
      }
      else
      {
        gameWeek = value;
      }
    }
  }

  public int gameYear;
} // end class GameData

這需要很多的解釋=)

將其聲明為public static int gameweek;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM