【发布时间】:2015-05-24 00:19:47
【问题描述】:
我遇到了一个很奇怪的NullReferenceException。我使用new 关键字将对象设置为实例,但仍然抛出异常。这是我的代码:
游戏类
public class Game
{
public Game(Player playerParam)
{
Player = playerParam;
}
public Player Player;
public int Duration = 60;
}
public class Player
{
public Difficulty Difficulty;
public string Name;
public int Bonus;
}
现在我首先创建 Player 实例,然后在游戏开始时创建游戏并传入 Player。这按预期工作。但是我有另一个设置类,它的构造函数接受一个游戏对象并访问玩家来更改一些设置。我是这样做的:
public class Settings
{
private Game game;
public Settings(Game gameParam)
{
game = gameParam;
}
private void changeDifficulty(Difficulty difficulty)
{
game.Player.Difficulty = difficulty;
}
}
线
game.Player.Difficulty = difficulty;
即使我传入 Settings 构造函数(一个已经初始化的 Game 对象),也会引发 NullReferenceException。进入代码我发现设置上的游戏对象(游戏)仍然为空。这里有什么问题
播放器是这样实例化的
Player player = new Player();
就在构造函数的正上方。
以下是其他详细信息。 我在 Game 之前实例化 Player,这是在主游戏 Form 上完成的。然后我将实例化的值传递给实际上是另一个 WinForm 的设置。当我将它传递给设置表单构造函数时,我进入代码并发现游戏被实例化。但是在设置表单上,游戏对象在访问时为空。
【问题讨论】:
-
你离开了用非空玩家实例化游戏的部分
-
你必须在改变难度之前调用设置构造函数。
-
您能否向我们展示您创建播放器、游戏、设置等的代码以及它们是如何注入的。
-
请显示您创建播放器的代码。应该类似于
Player p = new Player; -
你确定你实例化播放器正确吗?请向我们展示更多代码
标签: c# instance nullreferenceexception