C# 为什么变量触发器引发异常?

C# 为什么变量触发器引发异常?,c#,variables,triggers,C#,Variables,Triggers,我一直在声明一个带有触发器的变量。每当变量的值发生变化时,就会触发此触发器,并且触发器机制应该改变另一个变量的值 下面的代码编译得很好,但抛出NullReferenceException() 文件:Program.cs using System; using System.Windows.Forms; namespace test { class Program { public static Active active = new Active();

我一直在声明一个带有触发器的变量。每当变量的值发生变化时,就会触发此触发器,并且触发器机制应该改变另一个变量的值

下面的代码编译得很好,但抛出NullReferenceException()

文件:Program.cs

using System;
using System.Windows.Forms;

namespace test {
    class Program {
        public static Active active = new Active();
        public static FormMain formMain = new FormMain();

        [STAThread]

        static void Main() {
            Application.Run(formMain);
        }
    }
}
namespace test {
    public class Active {
        public string UserName {
            get {
                return (Program.formMain.labelUserName.Text);
            }
            set {
                Program.formMain.labelUserName.Text = value;
            }
        }
    }
}
using System;
using System.Windows.Forms;

namespace test {
    class FormMain : Form {
        public Label labelUserName = new Label();

        public FormMain() {
            this.Controls.Add(labelUserName);
            Program.active.UserName = "User Name";
        }
    }
}
文件:DataStruct.cs

using System;
using System.Windows.Forms;

namespace test {
    class Program {
        public static Active active = new Active();
        public static FormMain formMain = new FormMain();

        [STAThread]

        static void Main() {
            Application.Run(formMain);
        }
    }
}
namespace test {
    public class Active {
        public string UserName {
            get {
                return (Program.formMain.labelUserName.Text);
            }
            set {
                Program.formMain.labelUserName.Text = value;
            }
        }
    }
}
using System;
using System.Windows.Forms;

namespace test {
    class FormMain : Form {
        public Label labelUserName = new Label();

        public FormMain() {
            this.Controls.Add(labelUserName);
            Program.active.UserName = "User Name";
        }
    }
}
文件FormMain.cs

using System;
using System.Windows.Forms;

namespace test {
    class Program {
        public static Active active = new Active();
        public static FormMain formMain = new FormMain();

        [STAThread]

        static void Main() {
            Application.Run(formMain);
        }
    }
}
namespace test {
    public class Active {
        public string UserName {
            get {
                return (Program.formMain.labelUserName.Text);
            }
            set {
                Program.formMain.labelUserName.Text = value;
            }
        }
    }
}
using System;
using System.Windows.Forms;

namespace test {
    class FormMain : Form {
        public Label labelUserName = new Label();

        public FormMain() {
            this.Controls.Add(labelUserName);
            Program.active.UserName = "User Name";
        }
    }
}

这是因为当您在
FormMain
构造函数中时,静态变量
Program.FormMain
尚未初始化,因为您正在创建
FormMain
对象,您想用它初始化
Program.FormMain


直接更新
labelUserName

这是因为当您在
FormMain
构造函数中时,静态变量
Program.FormMain
尚未初始化,因为您正在创建
FormMain
对象,您想用它初始化
Program.FormMain


直接更新
labelUserName

这是因为当您在
FormMain
构造函数中时,静态变量
Program.FormMain
尚未初始化,因为您正在创建
FormMain
对象,您想用它初始化
Program.FormMain


直接更新
labelUserName

这是因为当您在
FormMain
构造函数中时,静态变量
Program.FormMain
尚未初始化,因为您正在创建
FormMain
对象,您想用它初始化
Program.FormMain


直接更新
labelUserName

为了节省空间,我对原始代码做了一些修改。在原始代码中,FormMain打开另一个表单(FormLogin),并在评估密码后更新状态栏中的用户名。我没有为类
Active
声明变量,而是尝试将其用作全局变量(如
Active.UserName=“…”
),但这也不起作用。为了节省空间,我对原始代码做了一些更改。在原始代码中,FormMain打开另一个表单(FormLogin),并在评估密码后更新状态栏中的用户名。我没有为类
Active
声明变量,而是尝试将其用作全局变量(如
Active.UserName=“…”
),但这也不起作用。为了节省空间,我对原始代码做了一些更改。在原始代码中,FormMain打开另一个表单(FormLogin),并在评估密码后更新状态栏中的用户名。我没有为类
Active
声明变量,而是尝试将其用作全局变量(如
Active.UserName=“…”
),但这也不起作用。为了节省空间,我对原始代码做了一些更改。在原始代码中,FormMain打开另一个表单(FormLogin),并在评估密码后更新状态栏中的用户名。我没有为类
Active
声明变量,而是尝试将其用作全局变量(如
Active.UserName=“…”
),但这也不起作用。您试图在初始化
FormMain
之前调用它,这里的总体设计很糟糕。该模型在多个位置与UI耦合&不需要使用
静态
变量。您试图在它实际初始化之前调用
FormMain
,这里的总体设计很糟糕。该模型在多个位置与UI耦合&不需要使用
静态
变量。您试图在它实际初始化之前调用
FormMain
,这里的总体设计很糟糕。该模型在多个位置与UI耦合&不需要使用
静态
变量。您试图在它实际初始化之前调用
FormMain
,这里的总体设计很糟糕。该模型在多个位置与UI耦合&不需要使用
静态
变量。