C#初始化对象

时间:2016-11-25 06:30:24

标签: c# visual-studio object initialization

我知道这听起来很简单,但我在初始化对象方面遇到了问题。每当我运行我的代码。我一直收到错误。我需要在第27行初始化遭遇。

""未处理的类型' System.NullReferenceException'发生在WPFBattle.exe"。 "

所以我问了一个人他们告诉我了

"您忘记在MainWindow的构造函数中初始化遭遇。由于您没有对其进行初始化但仍将其传入,因此遇到的传递为null,这意味着您无法调用自动启动。公共icombat遭遇是声明,它不是初始化它。您可以像使用new关键字以及战斗构造函数那样对任何用户定义的对象进行初始化。"

所以我尝试过这样做,但我一直都会遇到错误。我不确定为什么它不起作用。我附上了我的代码图片,非常感谢任何帮助

PICTURE OF MY CODE

PICTURE OF MY CODE 2

1    namespace WPFBattle
2    {
3    
4    
5     public partial class MainWindow : Window
6        {
7            private TextBoxStreamWriter consoleWriter;
8            private TextBox outputField;
9            private IList<ICharacter> playerParty = new List<ICharacter>();
10            public ICombat encounter;
11            private CombatThread combatThread;
12    
13            public MainWindow()
14            {
15                InitializeComponent();
16    
17                // Redirect console
18                consoleWriter = new TextBoxStreamWriter(outputField);
19                Console.SetOut(consoleWriter);
20    
21                //creates the two parties
22                List<ICharacter> party = new List<ICharacter>();
23                List<ICharacter> enemy = new List<ICharacter>();
24    
25    
26    
27                //PLACE I NEED TO INITIALIZE MY OBJECT AT 
28    
29    
30                combatThread = new CombatThread(encounter);
31                combatThread.Start();
32            }
33    
34            private void textBox_TextChanged(object sender, TextChangedEventArgs e)
35            {    
36    
37            }
38    
39    
40        }
41    }

2 个答案:

答案 0 :(得分:1)

第10行:您有以下代码:

public ICombat encounter;

但这种变量遭遇永远不会成为一种价值。所以它是空的。在第30行:您将此null值传递给combatThread。

combatThread = new CombatThread(encounter);

如果combatThread访问遇到类似的地方:

encounter.DoSth();

它会抛出一个

  

的NullReferenceException

因为遇到ICombat类型并且这是一个接口,所以不能在其上使用new运算符。您将需要一个实现此接口的类。

public class Combat : ICombat
{
   //Implement what the Interface need
}

并为您的遭遇参考创建一个新对象。

encounter = new Combat(); //IMPORTANT
combatThread = new CombatThread(encounter);
combatThread.Start();

答案 1 :(得分:0)

要初始化遭遇,您需要致电

{{1}}

虽然你已经尝试过,但我猜这个问题还存在于其他地方。 你如何在CombatThread中使用遭遇?我猜你在CombatThread中保留了对它的引用,但忘记了或者对CombatThread.mEncounter进行了错误的分配。

在CombatThread中如何初始化遇到的引用?