Burada, yükseltme mantığını, ayar sınıflarının türetebileceği soyut bir sınıfa yerleştiren çözümlerin bir varyasyonu.
Önerilen bazı çözümler, önceki ayarların ne zaman yüklenmediğini belirten bir değer belirtmek için DefaultSettingsValue özniteliğini kullanır. Benim tercihim, varsayılan değeri bunu gösteren bir tür kullanmaktır. Bonus olarak, bir DateTime? yardımcı hata ayıklama bilgisidir.
public abstract class UserSettingsBase : ApplicationSettingsBase
{
public UserSettingsBase() : base()
{
// Accessing a property attempts to load the settings for this assembly version
// If LastSaved has no value (default) an upgrade might be needed
if (LastSaved == null)
{
Upgrade();
}
}
[UserScopedSetting]
public DateTime? LastSaved
{
get { return (DateTime?)this[nameof(LastSaved)]; }
private set { this[nameof(LastSaved)] = value; }
}
public override void Save()
{
LastSaved = DateTime.Now;
base.Save();
}
}
UserSettingsBase öğesinden türet:
public class MySettings : UserSettingsBase
{
[UserScopedSetting]
public string SomeSetting
{
get { return (string)this[nameof(SomeSetting)]; }
set { this[nameof(SomeSetting)] = value; }
}
public MySettings() : base() { }
}
Ve kullanın:
// Existing settings are loaded and upgraded if needed
MySettings settings = new MySettings();
...
settings.SomeSetting = "SomeValue";
...
settings.Save();