我正在尝试从另一个类中的方法更改变量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不存在。
答案 0 :(得分:0)
很抱歉,之前的帖子输入太快了。
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,并且年份将再次增加1。
编辑:回应海报无法设定价值并将其反映出来的问题
我没有用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
这需要更多的解释=)
答案 1 :(得分:0)
声明为 public static int gameweek;