"Setting" class in C#

本文关键字:quot in Setting class | 更新日期: 2023-09-27 18:19:19

我正在阅读使用c#和sliverlight的windows phone 7教程,我发现了这一行

public static class Settings
{
    public static readonly Setting<bool> IsRightHanded = 
        new Setting<bool>("IsRightHanded", true);
     public static readonly Setting<double> Threshold =
        new Setting<double>("Threshold", 1.5);
}

我找不到C#中的Setting类,我想知道它是否在特殊的命名空间下或需要额外的引用来添加

"Setting" class in C#

如果它是一个自定义类,并且没有在教程中描述,你能不重新实现它吗?在我看来,这个类应该有一个这样的签名:

public class Setting<T> 
{
    public Setting<T>(string name, T value)
    { 
        Name = name;
        Value = value;
    } 
    public string Name { get; set; }
    public T Value { get; set; }
}

当然,可能还有更多的原因。在教程中,该类上访问/绑定了哪些属性?

如果你正在使用"101 Windows Phone 7 Apps"这本书,设置类在第20章中实现和解释。

这是我使用的Setting<T>类。它支持通过INotifyPropertyChanged进行变更通知,这对绑定很有用(在WPF/SL等中)。它还维护一个默认值的副本,以便在需要时可以重置。

作为一般规则,T应该是不可变的。

public class Setting<T> : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    public event Action<T> Changed;
    private readonly T _defaultValue;
    private T _value;
    public Setting(T defaultValue)
    {
        _defaultValue = defaultValue;
        _value = defaultValue;
    }
    public T Value
    {
        get { return _value; }
        set
        {
            if (Equals(_value, value))
                return;
            _value = value;
            var evt = Changed;
            if (evt != null)
                evt(value);
            var evt2 = PropertyChanged;
            if (evt2 != null)
                evt2(this, new PropertyChangedEventArgs("Value"));
        }
    }
    public void ResetToDefault()
    {
        Value = _defaultValue;
    }
}