声明一个对象数组供全局使用C#

时间:2016-03-08 20:28:08

标签: c# arrays object

我正在使用C#编写一个多表单程序,并希望在程序运行时创建数组,如下所示

private void Form1_Load(object sender, EventArgs e)
{
    GlobalVariables();
    MessageBox.Show("Number Of Users Check", 
      "There are " & Form1.AllAdmins.Length    & " Admins" &
      "There are " & Form1.AllLecturers.Length & " Lecturers" &
      "There are " & Form1.AllStudents.Length  & " Students");

}

public void GlobalVariables()
{
    UserAdmin[] AllAdmins = new UserAdmin[0];
    UserLecturer[] AllLecturers = new UserLecturer[0];
    UserStudent[] AllStudents = new UserStudent[0];
}

根据Visual Studio,我的数组不存在。

如何以一种允许我以后在另一种形式上向他们添加数据的方式创建这些数组?

以上所有内容都发生了变化,因为我现在明白,我希望它能起作用的方式不会起作用。我现在明白全局变量是一个坏主意,并且已经转移到具有在表单加载时创建的项目列表,因为它允许我们稍后将项目添加到列表中。

3 个答案:

答案 0 :(得分:0)

首先请不要使用全局变量。是一种糟糕的(最差的)练习。

其次要做你想要的,你需要创建一个像这样的静态类。

public static class MyGlobalArrays {
    public static UserAdmin[] AllAdmins;
    public static UserLecturer[] AllLecturers;
    public static UserStudent[] AllStudents;
}

您可以像这样访问您的数组:MyGlobalArrays.AllAdmins

在您的程序中,您无法访问阵列,因为您定义它们的范围是本地的。它们只能通过您在GlobalVariables()内的案例中访问它们。

答案 1 :(得分:0)

您可以将它们创建为公开和静态作为您班级的字段。

但它可能会引发你的问题,因为每个班级都可以改变他们的内容。

顺便说一句,最好使用列表代替数组,因为以后更容易向它们添加数据。

public static List<UserAdmin> AllAdmins = new List<UserAdmin>();

答案 2 :(得分:0)

一旦GlobalVariables()方法完成,您的数组变量就会超出范围。

警告:作为一种启发式方法,“全局变量是邪恶的”应该用于提醒您思考您的问题,看看使用全局变量是否可能会回来并咬你。对于可变的全局变量,当您不期望值时,可以从您下面更改值。但是,如果您没有进行任何并行或异步编程,那么这种风险会有所降低。

实际上,你应该避免在95%的时间内使用可变全局变量。你应该真正思考你希望代码如何运作。

话虽这么说,如果你希望Form1_Load函数能够看到你的数组,你需要像这样重构你的代码:

UserAdmin[] AllAdmins = new UserAdmin[0];
UserLecturer[] AllLecturers = new UserLecturer[0];
UserStudent[] AllStudents = new UserStudent[0];

private void Form1_Load(object sender, EventArgs e)
{
      GlobalVariables();
      MessageBox.Show("Number Of Users Check", 
        "There are " & Form1.AllAdmins.Length    & " Admins" &
        "There are " & Form1.AllLecturers.Length & " Lecturers" &
        "There are " & Form1.AllStudents.Length  & " Students");
}