2008-11-21 95 views
1

我想在Visual C#中创建一个程序,它有我创建的一个类,并且在应用程序启动时创建一个我的类对象的数组,以及此对象的这个数组可以在整个程序中使用。因此,任何函数或控件的事件都可以访问对象及其成员变量的数组。 我创建我的类为“公共”,但出于某种原因,我在构建时得到这些错误: “名称'MyArrayObjectNameHere'在当前上下文中不存在' 当我尝试访问加载文件对话框中的对象成员变量事件中,我正试图从文件加载数据到对象数组的成员变量。在Visual C#中我不能让我的公共类公开

对象数组是否存在需要声明和构造的特定位置,以便它存在于每个上下文中?如果是这样,你能告诉我这是哪里吗?

我目前在form1运行之前在main函数中声明它。

我的类定义看起来像这样在自己的cs文件和程序的命名空间:

public class MyClass 
{ 
    public int MyInt1; 
    public int MyInt2; 
} 

我形式加载之前宣布的主函数中这样的对象数组:

MyClass[] MyArrayObject; 
MyArrayObject = new MyClass[50]; 
for (int i = 0; i < 50; i++) 
{ 
    MyArrayObject[i] = new MyClass(); 
} 

在此先感谢您的帮助。

回答

4

你的问题是,你在主函数中定义它的任何地方,因此它只能在主函数中存在。你需要在课堂上定义它,而不是在功能里

 
public partial class Form1:Form 
{ 
MyClass[] MyArrayObject; // declare it here and it will be available everywhere 

public Form1() 
{ 
//instantiate it here 
MyArrayObject = new MyClass[50]; 
for (int i = 0; i
+0

它的工作,非常感谢你先生。 – timmyg 2008-11-21 17:36:36

0

只有静态对象在所有上下文中都可用。当你的设计缺乏......呃,只是缺少在一般情况下,你可以做到这一点的方法是添加维护您的MyClass阵列的第二,静态类:

public static class MyClassManager 
{ 
    private MyClass[] _myclasses; 
    public MyClass[] MyClassArray 
    { 
    get 
    { 
     if(_myclasses == null) 
     { 
     _myClasses = new MyClass[50]; 
     for(int i = 0; i < 50;i++) 
     _myClasses[i] = new MyClass(); 
     } 
     return _myclasses; 

    } 
    } 
} 

请你最爱抢CLR通过Jeffrey Richter的C#。跳过前几章并阅读其余章节。

0

您需要将该数组设置为某个类的静态成员,.NET不具有任何类之外的全局作用域。

例如

class A 
{ 
    public static B[] MyArray; 
}; 

然后,您可以访问它A.MyArray

0

这不好。它对像我这样的学习者非常有用。