2008-11-21 63 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

這不好。它對像我這樣的學習者非常有用。