gpt4 book ai didi

c# - 在表单之间共享类

转载 作者:行者123 更新时间:2023-11-30 21:00:28 25 4
gpt4 key购买 nike

假设我想使用自定义类来存储用户设置,并使用 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);

我做错了什么?

最佳答案

因为它表示逻辑上“全局”的状态,而不是应该允许作为多个实例存在的状态,所以您认为它应该是静态的是正确的。由于您需要拥有对象的实际实例,这意味着适当的解决方案是使用单例。这将为您提供一个可以序列化的实例,但该实例可以在整个应用程序中公开,并且您可以确定永远只有一个实例。

关于c# - 在表单之间共享类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14878212/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com