Наличие нескольких свойств, увеличивающих одну переменную.Простая проверка его стоимости? - PullRequest
0 голосов
/ 24 февраля 2011

У меня есть 10 свойств, где, когда каждый из них установлен, он увеличивает значение переменной Value.Когда значение Value равно 10, приложение завершится.Но, кажется, неловко писать одно и то же условие в каждом из них, например:

int Value=0;
int A
{
   set
   {
     a=value;
     Value++;
     if(Value>10) ... //check here
   }
}
int B
{
   set
   {
     b=value;
     Value++;
     if(Value>10)  //check here again
   }
}

Как мне упростить проверку его значения?

Ответы [ 4 ]

1 голос
/ 24 февраля 2011

Я предполагаю, что ваши свойства находятся в классе, который имеет другие обязанности, кроме выхода из программы, когда счетчик достигает 10. Если это так, я бы удалил логику проверки счетчика и выхода из приложения из класса.Может быть, вы можете использовать событие.Подписчик на это событие будет уведомлен, когда Значение достигнет 10 (вы могли бы на самом деле сделать «10» настраиваемым, но это всего лишь короткий пример) и выйти из приложения.

class YourClass {
    public event ValueHandler ValueIs10;
    public EventArgs e = null;
    public delegate void ValueHandler(YourClass m, EventArgs e);

    private int _value=0;

    public int Value {
        get {return _value;}
        private set {
            _value=value;
            if(_value==10 && ValueIs10 != null) ValueIs10(this, e);
        }
    }

    public int A
    {
       set
       {
         a=value;
         Value++;
       }
    }

    public int B
    {
       set
       {
         b=value;
         Value++;
       }
    }  

    // ...
}
1 голос
/ 24 февраля 2011

Вы можете создать частное свойство для Value и в установщике этого свойства, если значение больше 10, закрыть приложение.

0 голосов
/ 24 февраля 2011

Оба ответа @Richard и @Emil верны, но чтобы сделать ваш код более расширяемым в будущем, лучше реализовать встроенный INotifyPropertyChanged интерфейс .

class Data : INotifyPropertyChanged
{
    private int _counter = 0;

    public event PropertyChangedEventHandler PropertyChanged = (sender, arg) =>
        {
            // if (_counter > 10) Exit();
            // from arg you can know what property is changed
            // which is probably used for future
        };

    private int _number;
    public int Number
    {
        get { return _number; }
        set
        {
          //here is another unclear point in your question
          //will the counter increases when setting a.Number = 100 
          //but it's already 100 before setting
            if (_number != value)
            {
                _number = value;
                PropertyChanged(this, new PropertyChangedEventArgs("Number"));
            }
        }
    }
}
0 голосов
/ 24 февраля 2011
private int counter;
private int b;
private int a;

public int A
{
    set 
    {
         counter++;
         a = value;
         CheckCounter();
    }
}

public int B    {
    set 
    {
         counter++;
         b = value;
         CheckCounter();
    }
}


public void CheckCounter()
{
     if (counter>10)
     {
         //Do something
     }
}

или сделать счетчик свойством ..

private int Counter
{
    set
    {
        counter = value;
        CheckCounter();
    }
    get
    {
        return counter;
    }
}

и использовать его при увеличении ..

Counter++;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...