Безопасно ли добавлять делегатов к событиям с ключевым словом new?

StackOverflow https://stackoverflow.com/questions/99790

  •  01-07-2019
  •  | 
  •  

Вопрос

Одна вещь, которая меня беспокоит, - это то, что я обнаружил два способа регистрации делегатов на мероприятия.

  1. OnStuff += это.Обрабатывать;
  2. OnStuff += новый StuffEventHandler(этот.Дескриптор);

Первый из них чистый, и имеет смысл выполнить "OnStuff -= this.Handle;", чтобы отменить регистрацию в событии...Но в последнем случае, должен ли я сделать "OnStuff -= new StuffEventHandler(this.Handle);"?Такое ощущение, что я вообще ничего не удаляю, поскольку добавляю другую ссылку на StuffEventHandler.Сравнивает ли событие делегат по ссылке?Я обеспокоен тем, что у меня может образоваться неприятный пул памяти.Понял меня?У меня нет ссылки на "новый StuffEventHandler", который я зарегистрировал ранее.

В чем недостаток выполнения №1?

В чем польза от выполнения №2?

Это было полезно?

Решение

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

Когда вы вызываете "OnStuff -= new StuffEventHandler(this.Handle);", код удаления выполняет нет сравните удаляемый вами делегат по ссылке:он проверяет равенство путем сравнения ссылок на целевые методы, которые будет вызывать делегат, и удаляет соответствующие делегаты из "OnStuff".

Кстати, "OnStuff" сам по себе является объектом делегата (ключевое слово event, которое, я полагаю, у вас есть в вашем объявлении, просто ограничивает доступность делегата).

Другие советы

Номер один - это просто сокращение, которое сгенерирует тот же MSIL, что и 2-й, при типе компиляции он посмотрит на это.Обработайте и выведите делегат для создания экземпляра.Но вы никогда не должны отказываться от подписки, используя new.

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

У меня сложилось впечатление, что 2 - это просто синтаксический сахар.Они должны быть именно так то же самое.

Если я правильно помню, первая альтернатива - это просто синтаксический сахар для второй.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top