«Настройка» класса в C # - PullRequest
3 голосов
/ 04 января 2012

Я читал учебник для Windows Phone 7, используя C # и Sliverlight, и я нашел эту строку

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);
}

Я не могу найти класс Setting в C# Я хотел бы знать, находится ли он в специальном пространстве имен или нужна дополнительная ссылка для добавления

Ответы [ 3 ]

7 голосов
/ 04 января 2012

Если это пользовательский класс, и он не описан в учебнике, из которого вы это получили, не можете ли вы переопределить его? Мне кажется, что у класса была бы подпись примерно так:

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; }
}

Конечно, здесь может быть что-то большее. Какие свойства доступны / связаны с этим классом в руководстве?

3 голосов
/ 31 января 2012

Если вы используете книгу «101 Windows Phone 7 Apps», Настройка класса реализована и объяснена в главе 20.

1 голос
/ 20 февраля 2012

Вот класс 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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...