C# 我希望类有自己的预定义实例-最好的方式?

C# 我希望类有自己的预定义实例-最好的方式?,c#,serialization,C#,Serialization,例如,我有一个带有配置文件设置的配置文件类,并希望提供几个带有相应设置的默认配置文件最好的方法是什么? 我知道.NET中的一些类有这样的功能,比如String及其静态String.Empty属性 1.我目前的做法是 public static readonly ICollection<Profile> DefaultProfiles; 公共静态只读ICollection DefaultProfiles; 配置文件类中的字段。此字段由配置文件的静态构造函数中的默认配置文件填充 2.

例如,我有一个带有配置文件设置的配置文件类,并希望提供几个带有相应设置的默认配置文件最好的方法是什么?

我知道.NET中的一些类有这样的功能,比如String及其静态String.Empty属性

1.我目前的做法是

public static readonly ICollection<Profile> DefaultProfiles;
公共静态只读ICollection DefaultProfiles;
配置文件类中的字段。此字段由配置文件的静态构造函数中的默认配置文件填充

2.这种方法的缺点是序列化—序列化需要的不是静态成员,而不是只读成员。因此,要用默认配置文件序列化我的配置文件,我必须为它创建特殊的、非静态的、非只读的属性。但是我也希望Profile类的实体在序列化之前没有新的个人默认概要列表(当然不能在序列化之后)。我能这样够到它吗

[Serializable]
public class Profile
{
    public static readonly ICollection<Profile> DefaultProfiles;        

    public List<Profile> DefaultProfilesToSerialize
    {
        get { return new List<Profile>(DefaultProfiles);; }
    }
}
[可序列化]
公共班级简介
{
公共静态只读ICollection DefaultProfiles;
公共列表DefaultProfilesToSerialize
{
获取{返回新列表(DefaultProfiles);}
}
}

因此,如果没有DefaultProfilesToSerialize的任何支持字段,则每个配置文件实例只有一个默认配置文件实例。我说得对吗?

这是一种很好的方法,除非您使用的是数据库。然后我将默认值移到那里。@lokusking,我添加了关于序列化的想法。我的方法需要额外的代码来配合序列化。但是您需要序列化那些预定义的、不变的默认值吗?当有人使用其中一个默认值时,它只是一个常规值。你不必担心序列化。由于默认值在代码中存储为常量,因此它们将始终可用。您是对的。此
i收集
将出现在对象的每个实例中。您可以考虑使用工厂模式来代替。