Intereting Posts
Является ли Groovy потенциальным языком разработки для Android Как настроить VPN программно? Стиль кнопок дизайна материалов для Android Пользовательские точки на графике с использованием AndroidPlot Плагин ADT исчез в Eclipse Последнее слово в последней строке Android может привести к неправильному размеру текстового комментария при использовании правильного поля Измените текстовый формат переключателя и получите список всех стран и поместите его в spinner Android. С какой версии Android поддерживается «drawable-nodpi»? Создание приложения для камеры Android с использованием API-интерфейса Camera, который будет работать на всех устройствах Android: получите учетную запись Google Play, связанную с выставлением счетов в приложении. Обратный вызов DialogFragment при изменении ориентации Пользовательский TextView в Android с разными цветовыми словами Android edittext Программно не удается выровнять ImageView в RelativeLayout Почему Eclipse ADT не распознает мое устройство Android в окнах?

Лучший вариант для подписки на события

Можете ли вы сказать мне, что лучший способ создать событие или все варианты хороши?

// OPTION 1 buttonAlert.Click += delegate { textChange.Text = string.Format("Hello World"); }; // OPTION 2 buttonAlert.Click +=(sender, e) => { textChange.Text = string.Format("Hello World"); }; // OPTION 3 buttonAlert.Click += delegate (object sender, EventArgs e) { textChange.Text = string.Format("Hello World"); }; 

Это просто вопрос предпочтения. С точки зрения производительности все эквивалентны.

Итак, выбирайте на основе того, что вам нужно и предпочитаете.

В дополнение к моему ответу я хотел бы предупредить, что вы должны отказаться от подписки на событие (- =) после subscrive (+ =).

Из документации :

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

Я бы сказал, что первый вариант является лучшим, когда вам не нужны параметры лямбда (отправитель, событие). Между вторым и третьим я выбрал бы второй, потому что он чище (только вопрос предпочтения.

Вы также можете использовать метод в качестве делегата, и это, вероятно, лучше всего, если вы хотите правильно управлять памятью. Когда вы используете делегат или лямбда, невозможно отказаться от подписки. Это означает, что даже если вы уничтожите или оставите действие / фрагмент, объект останется в памяти, и сборщик мусора не сможет его очистить. В случае, когда пользователь открывает и закрывает этот экран много раз, вы можете получить исключение OutOfMemoryException . Это происходит очень часто в Android. Это было бы решением:

 protected override void OnResume() { base.OnResume(); buttonAlert.Click += OnButtonClick; } protected override void OnPause() { base.OnPause(); buttonAlert.Click -= OnButtonClick; } private void OnButtonClick(object sender, EventArgs e) { textChange.Text = string.Format("Hello World"); }