如何从其他类更改变量?

时间:2014-02-20 00:45:38

标签: c# xna-4.0

我正在尝试从另一个类中的方法更改变量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不存在。

2 个答案:

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

相关问题