如何为一个表单访问一个类,而不为另一个表单访问?

时间:2013-08-06 10:49:57

标签: c# winforms class

我正在制作一个非常基本的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。没有进行穿线)

3 个答案:

答案 0 :(得分:1)

您在表单中声明speciesprivate,因此您无法从该表单外部访问它。您需要将其声明为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的元素。

结论是介于两者之间,大小数组以较大的大小重新创建,或者物种变量最终指向不同的实例。通过调试器运行代码,并查看它与物种变量/大小数组的交互方式。