Как вызвать метод, при изменении значения переменной

108
30 января 2022, 01:20

Мне нужно вызывать метод, при изменении значения какой либо переменной. Я знаю самый простой способ - через property.

private int health;
public int Health
{
    get => health;
    set
    {
        health = value;
        //И тут вызывать метод.
    }
}

Но в таком случае, нужно строго использовать объявленный property Health. Это не очень удобно, так как можно очень легко ошибится и использовать health вместо Health. Поэтому постоянно приходиться держать в голове, что нужно использовать Health.

Я считаю, что должен быть другой способ, попроще, который я не знаю, но надеюсь, что его знаете Вы!

Answer 1
private int _health;
public int Health {
  set { 
    if (value != _health) {
      _health = value;
      // call method
    }
  }
  get {
    return _health;
  }
}
Answer 2

Другой вариант с событиями

class Person
{
    internal delegate void HealthEvent();
    public event HealthEvent OnHealthChanged; 
    private int _health;
    public int Health
    {
        set
        {
            if (value != _health)
            {
                _health = value;
                if (OnHealthChanged != null) OnHealthChanged();
            }
        }
        get
        {
            return _health;
        }
    }
}

после создаете экземпляр класса

Person p = new Person();

и подписываете его на ваш метод, это может быть один или несколько методов

p.OnHealthChanged += InformIfHealthChanged;
Answer 3
if(value) 
{
   //do something
}

Если я правильно понял вопрос

READ ALSO
Как получить к явной реализации интерфейса в базовом классе из класса наследника

Как получить к явной реализации интерфейса в базовом классе из класса наследника

Базовый класс определен в библиотеке и изменить его я не могуМне нужно переопределить в наследнике метод базового класса, являющийся явной...

176
Удаление файлов в каталогах и подкаталогах старше определенной даты последнего изменения

Удаление файлов в каталогах и подкаталогах старше определенной даты последнего изменения

Уважаемые эксперты, помогите разобратьсяЕсть OpenBrowserDialog через него выбираем корневой каталог, в нем содержатся подкаталоги с тестовыми...

150
Проблема с иконкой в трее C#

Проблема с иконкой в трее C#

имеется проблема с иконкой приложения в трее а именно,иконка в трее появляется и исчезает при этом все это происходит моментальноВот код...

84