Intereting Posts
Распределение битмапа с использованием BitmapFactory.Options.inBitmap вызывает IllegalArgumentException Android: использование ObjectAnimator для преобразования представления с дробными значениями размера View Разница и использование onCreate (), onCreateView () и onActivityCreated () в фрагментах Ошибка при компиляции AIDL Преобразование строки в формат timestamp MySQL в php Переопределение андроида: эллипсис на субтитре ActionBar Eclipse не генерирует файл apk для любого приложения, разработанного в нем? Как получить слушателя вида Android – Невозможно создать экземпляр активности – Класс не найден исключение после обновления до ADT 22 Что такое iml-файлы в Android Studio? Какую среду мобильного программирования вы рекомендуете для запуска? Есть ли способ заставить Volley обновить изображение? Как получить long & lat значение четырех углов в mapview в android? GetMeasuredWidth возвращает абсолютно неправильное значение Android: получение ресурсов $ NotFoundException для abc_ic_ab_back_material

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

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

// 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"); }; 

Solutions Collecting From Web of "Лучший вариант для подписки на события"

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

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

В дополнение к моему ответу я хотел бы предупредить, что вы должны отказаться от подписки на событие (- =) после 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"); }