Первое, что нужно отметить, это то, что ваше состояние является логическим. Это сэкономит вам несколько байтов оперативной памяти.
Следующее, на что следует обратить внимание, это то, что вы хотите игнорировать изменения на входе в течение определенного периода времени; это означает, что вам не нужно хранить «текущее» состояние; только последнее состояние ... которое в конечном итоге будет таким же. Это не может вас спасти, так как 2 логических значения и 1 логическое значение, скорее всего, будут занимать байт; но это дает компилятору шанс, и, самое главное, упрощает работу.
С этими 2 довольно незначительными улучшениями мы доберемся до более крупных. Не используйте макросы, если вы действительно не знаете, что делаете; и даже потом пересмотреть.
Пример кода Arduino имеет тенденцию предлагать их, потому что кто-то думал, что это облегчит изучение; но, честно говоря, они этого не делают. Они не являются функцией, и ваше использование этого действительно не делает то, что вы думаете, что делает. Arduino предлагает ограниченные способы отладки, так что вы не можете сказать, что ваше состояние ВСЕГДА будет высоким, потому что макроразложение таково:
int state = true;
for(static auto d = create_debounce();
debounce(d, val),
false;);
//New lines added for clarity.
Переместить его в функцию; пусть компилятор оптимизирует код, потому что он ВСЕГДА будет работать лучше, чем вы, если вы пишете код так, как это позволяет.
Обычно элемент управления отображается ради него самого и не отражает базовые данные. Например, кнопка
не будет привязана к бизнес-объекту - она существует только для того, чтобы по ней можно было щелкнуть.
Все вышеупомянутые ответы являются большими, но существует основное отличие, которое было пропущено. Это помогает принять лучшие решения относительно того, когда использовать что. Это ItemTemplate
свойство:
DateTemplate используется для элементов, которые предоставляют свойство ItemTemplate Вам для замены содержания его объектов использование DataTemplate
с, которую Вы определяете ранее согласно связанным данным через селектор, который Вы обеспечиваете.
, Но , если Ваше управление не предоставляет эту роскошь Вам затем, все еще можно использовать ContentView
, который может отобразить его содержание от предопределенного ControlTemplate
. Интересно, можно измениться ControlTemplate
свойство Вашего ContentView
во времени выполнения, но, в отличие от средств управления с ItemTemplate
свойство, Вы не можете иметь TemplateSelector
для этого (ContentView) управление. Однако все еще можно создать триггеры для изменения ControlTemplate
во времени выполнения.
В основном, ControlTemplate
описывает, как отображать Control, а DataTemplate
описывает, как отображать данные.
Например:
Метка
является элементом управления и будет включать ControlTemplate
, в котором говорится, что метка
должна отображаться с использованием границы
вокруг некоторого содержимого ( DataTemplate
или другой элемент управления).
Класс Customer
- это Data, и он будет отображаться с использованием DataTemplate
, который может отображать тип Customer
как StackPanel
содержащий два текстовых блока
, в одном из которых отображается имя, а в другом - номер телефона.