Intereting Posts
Spannable RecyclerView, например Snapchat-Discover Android: Когда мы используем getIntent ()? Insert} для завершения ошибки ClassBody даже при согласованных фигурных скобках Android-адаптер ListView не обновляется Активность камеры, возвращающая нулевой андроид Как повторить шаблон в пользовательском представлении до границ? Размер панели мягких кнопок Как разрешить пользователям просматривать и воспроизводить песни на Android, к которым у них уже есть доступ (например, через Google Play)? Что означает «установить Flash-плагин» в WebView? Android – E / Surface: queueBuffer: буфер очереди ожидания для SurfaceTexture, -22 crash Как выполнить простую задачу async с помощью андроида Как отличается индексация приложений Google от ссылок на приложения Facebook? Android, как получить 10 закрывает геоинформацию от текущей позиции Ошибка Ionic Cordova FileUpload: не разрешено загружать локальный ресурс Изменение стиля кнопки во всем приложении

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

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

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