C# Определить, когда свойства / поля изменились - PullRequest
0 голосов
/ 12 февраля 2020

Я хочу представить свойства / поля в моих классах системе пользовательского интерфейса, компоненты пользовательского интерфейса будут подписываться на каждое событие onChange поля, чтобы получать событие, когда поле изменилось, для обновления пользовательского интерфейса.

Что я До сих пор сделано создание оболочки для любого типа, который имеет значение свойства, которое запускает событие, когда оно установлено:

public class LogicClass
{
    public Synced<int> stuff;

    static void Main(string[] args)
    {
        // Then in the UI code we will have:
        // logicClass.stuff.onChange += HandleStuffChange;
    }
}

public class Synced<T>
{
    public event OnChange onChange;
    public delegate void OnChange(Synced<T> value);

    private T _value;
    public T value
    {
        get => _value;
        set
        {
            _value = value;
            onChange?.Invoke(this);
        }
    }
}

Проблема в том, что его раздражает обращение к свойству значения из обертка каждый раз, когда вы хотите изменить его. Есть ли способ сделать это более прозрачным с точки зрения клиентов (LogicClass в примере)? Отражение тоже приемлемо.

1 Ответ

0 голосов
/ 13 марта 2020

Проблема с вопросами вида "Как мы можем обнаружить изменения в процессах pu sh?" это предположение, что требование состоит в том, чтобы обнаруживать каждое изменение, даже изменения, сделанные в циклах for / while. Реальность такова, что это зависит от потребности потребителя в том, что контролируется. Вы не проверяете свой спидометр каждый раз, когда он меняется, например.

Процесс pu sh также может наводнить потребителя сообщениями. Что если изменится более одной точки данных, и сценарий потребует переопределения других связанных процессов?

Система, которая отслеживает информацию, называется инструментарием. Люди, квалифицированные для их создания, известны как инженеры систем управления. https://en.wikipedia.org/wiki/Instrumentation.

Инструкции для моего инструментария

http://www.powersemantics.com/e.html

  • Неинтегрированный
  • Только первичные данные
  • Извлечение, не пу sh
  • Организовано процессом
  • Никогда не в сети

Чтобы отслеживать изменения в точках данных, ваш пользовательский интерфейс должен кэшировать копию состояния и сравнивать дельты на каждом интервале опроса. Первичные данные иногда также получают более чем одним методом для обеспечения надежности.

...