不久,新的C#6.0自动实现的属性使我们可以做到这一点
public static bool IsSoundEffects { get; set; } = true; // C# 6.0 allows this
现在在某处,我更改了属性IsSoundEffects = false
,因此对其进行访问将是错误的。
嗯,所以如何获得实际的默认默认编译时自动实现的属性值。
类似的东西:Type.GetPropertyDefaultValue(IsSoundEffects);
//实际的编译时=真实
OR
default(IsSoundEffects) // idk, something like that
我为什么需要那个?
因为我从数据库填充属性。并在需要恢复默认值时将其恢复。例如设置。
看起来奇怪吗?我进行了足够的搜索,但是有关自动实现的功能的所有示例都没有恢复默认值。
属性仅比获取/设置函数对的语法糖多。构造函数运行时,您得到的几乎是基本的,标准的工作分配/函数调用。与所有文字和状态一样,它不应在运行时exist。
天真的方法是像IsSoundEffectsDefaultValue
这样的常量。我认为在大多数情况下这已经足够。
[我不太可能将我的旧想法应用于您的更广泛的问题。但是我需要搜索代码。
编辑:
不幸的是,我找不到我的旧代码。我可以重新创建它。基本思想是具有多个值“层”,一个值隐藏(但不覆盖)另一个值。
public class defaultAble<T>{
readonly T defaultValue;
//constructor
public defaultAble(T defaultValue){
this.defaultValue = defaultValue;
//First set the value
RestoreDefault();
}
public RestoreDefault(){
value = this.defaultValue;
}
public T value { get; set; }
}
编辑2:
在WPF / MVVM圈子中可能有更好的解决方案。许多MVVM用相同的代码编写属性-通过INotifyPropertyChanged引发更改通知。而且,Properties的一个大问题是不会偶然编写支持字段。
某些人想出了很多解决方案,例如将实际值和所有代码自动放入Dictionar<string, object>
之类。我不确定细节。而且DependancyProperties可能也接近它。