0

C#:Serializable()属性は、クラスインスタンスを別のフォームに渡すことを防ぎますか?

次のクラスがあり、アプリケーションの設定モジュールを構築しようとしています。しかし、settingForm メソッドで _configurator にアクセスしようとすると、「オブジェクト参照がオブジェクトのインスタンスに設定されていません」という例外が発生します。なんで?

[Serializable()]
public class Config
{
    public Config() { }
    public string ComPort
    {
        get
        {
            return comPort;
        }
        set
        {
            comPort = value;
        }
    }

    private string comPort;

}

public partial class kineticMoldDockUserControl : UserControl
{

    private settingsForm setForm = null; 

    private Config _cf = null;



    public kineticMoldDockUserControl()
    {
        InitializeComponent();

        _cf = new Config();
        _cf.ComPort = "COM12";

    }




    private void preferencesToolStripMenuItem_Click(object sender, EventArgs e)
    {



        if (!Application.OpenForms.OfType<settingsForm>().Any())
        {

            setForm = new settingsForm();

            setForm.Show();

            setForm.cf = _cf;


        }



    }


}

public partial class settingsForm : Form
{

    Config _configutor = null;
    public Config cf { get { return _configutor; } set { _configutor = value; } }


    public settingsForm()
    {
        InitializeComponent();

        try
        {
            MessageBox.Show(_configutor.ComPort.GetType().ToString());
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }

     }

}
4

4 に答える 4

4

エラーは Serializable 属性とは関係ありません。問題は以下のコード行にあります:

            setForm = new settingsForm();

            setForm.Show();

            setForm.cf = _cf;

SettingsForm コンストラクターはコンフィギュレーターを使用していますが、コンストラクターが呼び出された後に設定しています。問題を解決するために、コンストラクターを介してコンフィギュレーターを渡すことができます。

于 2010-09-23T13:54:03.057 に答える
1

貼り付けたコードは、settingsForm のコンストラクターで _configurator にアクセスするため、動作しません。

代わりに、Config インスタンスを受け入れるコンストラクターを作成する必要があります。

Serialization Attribute はエラーの原因ではありません。

于 2010-09-23T13:56:07.933 に答える
1

フォームを表示するまで cf 変数が設定されないときに、コンストラクターでコンフィギュレーターに関する情報を表示しようとしています。

于 2010-09-23T13:57:13.843 に答える
0

クラスをインスタンス化することは決してないからです。私が見る唯一のコードは次のとおりです。

Config _configutor = null;;

于 2010-09-23T13:56:37.723 に答える