C#:Serializable()属性是否阻止将类实例传递给另一个窗体?

C#:Serializable()属性是否阻止将类实例传递给另一个窗体?,c#,class,serializable,C#,Class,Serializable,C#:Serializable()属性是否阻止将类实例传递给另一个窗体 我有以下几个类,正在尝试为我的应用程序构建一个设置模块。但当我尝试在settingForm方法中访问_configurator时,我得到一个异常:“对象引用未设置为对象的实例”。为什么? [Serializable()] 公共类配置 { 公共配置(){} 公共字符串组件 { 得到 { 返回动作; } 设置 { comPort=值; } } 私有字符串组件; } 公共部分类kineticMoldDockUserControl:

C#:Serializable()属性是否阻止将类实例传递给另一个窗体

我有以下几个类,正在尝试为我的应用程序构建一个设置模块。但当我尝试在settingForm方法中访问_configurator时,我得到一个异常:“对象引用未设置为对象的实例”。为什么?

[Serializable()]
公共类配置
{
公共配置(){}
公共字符串组件
{
得到
{
返回动作;
}
设置
{
comPort=值;
}
}
私有字符串组件;
}
公共部分类kineticMoldDockUserControl:UserControl
{
私有设置Form setForm=null;
私有配置_cf=null;
公共kineticMoldDockUserControl()
{
初始化组件();
_cf=新配置();
_cf.ComPort=“COM12”;
}
private void preferencesToolStripMenuItem\u单击(对象发送者,事件参数e)
{
如果(!Application.OpenForms.OfType().Any())
{
setForm=新的settingsForm();
setForm.Show();
setForm.cf=\u cf;
}
}
}
公共部分类设置窗体:窗体
{
Config _configutor=null;
公共配置cf{get{return}u configutor;}set{{u configutor=value;}
公共设置窗体()
{
初始化组件();
尝试
{
Show(_configutor.ComPort.GetType().ToString());
}
捕获(例外情况除外)
{
MessageBox.Show(例如Message);
}
}
}

您的错误与Serializable属性无关。问题在于以下代码行:

            setForm = new settingsForm();

            setForm.Show();

            setForm.cf = _cf;

SettingsForm构造函数正在使用configurator,但您是在调用构造函数后进行设置的。您可以通过构造函数传递配置程序来解决问题。

您的错误与Serializable属性无关。问题在于以下代码行:

            setForm = new settingsForm();

            setForm.Show();

            setForm.cf = _cf;

SettingsForm构造函数正在使用configurator,但您是在调用构造函数后进行设置的。您可以通过构造函数传递configurator来解决问题。

您粘贴的代码无效,因为您在settingsForm的构造函数中访问了_configurator

您应该创建一个接受配置实例的构造函数


序列化属性不是导致错误的原因。

粘贴的代码不起作用,因为您在settingsForm的构造函数中访问了_configurator

您应该创建一个接受配置实例的构造函数


序列化属性不是导致错误的原因。

我要冒险说这就是原因,因为您从未实例化过类。我看到的唯一代码是:


Config\u configutor=null

我要冒险说,就是这样,因为你从来没有实例化过你的类。我看到的唯一代码是:


Config\u configutor=null

您试图在构造函数中显示有关配置程序的信息,而cf变量直到显示表单后才设置。

您试图在构造函数中显示有关配置程序的信息,而cf变量直到显示表单后才设置。

谢谢-我接受您的回答吗,或者我可以删除这篇文章,因为它发布在错误的地方吗?谢谢-我接受你的回答吗?或者我可以删除这篇文章,因为它发布在错误的地方吗?它被分配在属性设置器(下一行代码)中。这是在用户控件类中,而不是在他的表单类中。它被分配在属性设置器(下一行代码)中.但这是在用户控件类中,而不是在他的窗体类中。