[英]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.