如何更改自动实现的属性C#6.0的默认编译时值?

问题描述 投票:0回答:1

不久,新的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

我为什么需要那个?

因为我从数据库填充属性。并在需要恢复默认值时将其恢复。例如设置。

看起来奇怪吗?我进行了足够的搜索,但是有关自动实现的功能的所有示例都没有恢复默认值。

c# .net properties default-value c#-6.0
1个回答
2
投票

属性仅比获取/设置函数对的语法糖多。构造函数运行时,您得到的几乎是基本的,标准的工作分配/函数调用。与所有文字和状态一样,它不应在运行时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可能也接近它。

© www.soinside.com 2019 - 2024. All rights reserved.