Страницы

Поиск по вопросам

среда, 12 декабря 2018 г.

C#: наблюдение за переменной другого класса

Классический пример: класс Lamp , описывающий электрическую лампочку, с состояниями On (bool on = true) и Off (bool on = false). Я хочу отслеживать значения этой переменной из другого класса (например, LightingControl), чтобы этот класс реагировал на изменения состояния лампочки. Из класса Lamp не могут быть вызываны никакие методы других классов, так как класс Lamp является моделью непрограммируемого электрического прибора. Как это реализовать?
Заготовка кода для ответа:
class Lamp(){
public bool on;
public Lamp(bool onOrOffSignal){ this.on = onOrOffSignal; }
// ... }
class LightingControl(){
Lamp lamp = new Lamp();
// ...
// это реагирование должно происходить в режиме реального времни if (Lamp.on == true){ emergencyLighting.turnOff(); } else { emergencyLighting.turnOn(); }
}


Ответ

INotifyPropertyChanged, он должен быть известен вам по экспериментам с WPF:
class Program { static void Main(string[] args) { Lamp lamp = new Lamp(); LightingControl lc = new LightingControl(lamp); lamp.IsOn = true; lamp.IsOn = false; Console.ReadKey(); } }
class Lamp : INotifyPropertyChanged { bool isOn; public bool IsOn { get => isOn; set { isOn = value; PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(nameof(IsOn))); } }
public event PropertyChangedEventHandler PropertyChanged; }
class LightingControl { Lamp _lamp;
public LightingControl(Lamp lamp) { _lamp = lamp; lamp.PropertyChanged += OnLampPropertyChanged; }
private void OnLampPropertyChanged(object sender, PropertyChangedEventArgs e) { if (e.PropertyName == nameof(Lamp.IsOn)) { Console.WriteLine($"Lamp {(_lamp.IsOn ? "On" : "Off")}!"); } } }
Связанный вопрос: Как организовать взаимодействие объекта с его наблюдателем

Комментариев нет:

Отправить комментарий