カスタムクラスを使用してユーザー設定を保存し、XMLシリアル化を使用して保存するとします。
プログラムが起動すると、XMLファイルが逆シリアル化されます。これで、すべてのユーザー設定を含むクラスができました。
このクラスをアプリケーション内の他のすべてのフォームと共有するにはどうすればよいですか?
コンストラクターにパラメーターとして渡すよりも良い方法はありますか?
理想的には静的クラスを使用しますが、これにはインスタンスがないため、シリアル化できません。
どこからでもアクセスできる.NETプロパティファイルのようなものが欲しいのですが。
(残念ながら、これはペアのみを許可しますが、これは十分ではありません-したがって、私自身のXMLファイルです)
編集:
答えに基づいて、私は今これを持っています:
[Serializable]
public sealed class UserSettings
{
private static readonly UserSettings _instance = new UserSettings();
private string _FirstName;
private string _LastName;
public static UserSettings Instance
{
get
{
return _instance;
}
}
static UserSettings()
{
}
private UserSettings()
{
//Constructor
}
public string FirstName
{
get { return _FirstName; }
set { _FirstName = value; }
}
public string LastName
{
get { return _LastName; }
set { _LastName = value; }
}
}
値を含むこのクラスのインスタンスをシリアル化してファイルに保存しました。
私はそれをロードするためにこのコードを使用します:
private static void LoadUserSettings()
{
UserSettings us = UserSettings.Instance;
IFormatter formatter = new BinaryFormatter();
Stream stream = new FileStream(_AppSettingsFilePath, FileMode.Open, FileAccess.Read, FileShare.Read);
us = (UserSettings)formatter.Deserialize(stream);
stream.Close();
//System.Windows.Forms.MessageBox.Show(us.FirstName + " " + us.LastName);
}
LoadUserSettings関数(コメント付きの最後の行)でプロパティを読み取ると、保存された値が表示されます。
ただし、Form_loadでこのコードを実行すると、値は空になります。(実際、すべてがNULLです):
LoadUserSettings();
UserSettings us = UserSettings.Instance;
MessageBox.Show(us.FirstName + " " + us.LastName);
私は何が間違っているのですか?