我正在制作一个非常基本的2d(自上而下)“游戏”。因此我使用2种形式。一个用于UI(UIForm),另一个用于游戏的可视部分(Form1,也是第一个要加载的表单)。我还有一个定义不同动物种类的类,并提供大小等属性。
然而,似乎我无法从Form1访问Species类,因为我创建了UIForm(可以访问物种类)。
这将给出IndexOutOfRange异常:
private Species species = new Species();
int i = this.species.size[1];
这是有效的:
int i = UIForm.species.size[1];
这里我为了测试而在UIForm中公开了物种,并使用它来访问类物种。这有效,所以我可以解决它,但我该如何解决这个问题呢?为什么会这样?
在我制作UIForm之前,我曾经能够从form1访问物种类。
如果我太模糊或非常明显,我很抱歉,但我仍然是一个菜鸟。
(B.T.W。没有进行穿线)
答案 0 :(得分:1)
您在表单中声明species
为private
,因此您无法从该表单外部访问它。您需要将其声明为public
,并在size
类中将public
声明为Species
答案 1 :(得分:1)
看起来物种是UIForm
上的属性/字段,当您在下一个表单中使用它时,您正在为变量赋予new
物种实例。
private Sepcies species = new Species() // wrong
private Species species = UIForm.species // possibly right
或者更好
private Species GetUISpecies()
{
return UIForm.species;
}
答案 2 :(得分:0)
你说你的第一个例子是IndexOutOfRangeException
。这是因为Species的实例的大小数组中只有不到两个元素。
在第二个示例中,size数组至少有2个元素,这就是为什么你可以在那一点访问索引1的元素。
结论是介于两者之间,大小数组以较大的大小重新创建,或者物种变量最终指向不同的实例。通过调试器运行代码,并查看它与物种变量/大小数组的交互方式。