假设我想使用自定义类来存储用户设置,并使用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);
我在做什么错?
我喜欢它传递到构造函数。为了简化操作,请使用IOC容器(例如Unity,StructureMap等)。这将允许您保持您的代码结构不变但自动注入值。的[分享多个形式之间的一类] – 2013-02-14 15:29:55
可能重复(http://stackoverflow.com/questions/10325040/sharing-a-class-between-multiple-forms) – 2013-02-14 15:30:02