Вам не нужно использовать оператор new
. Вы не должны были с тех пор, как вышел C # 2.0:
foo.SomeEvent += EventHandler;
foo.SomeEvent -= EventHandler;
При этом используется преобразование группы методов для создания делегата из группы методов (имя метода). Это касается не только событий:
Action<string> writeToConsole = Console.WriteLine;
РЕДАКТИРОВАТЬ: Что касается , как это работает:
- Использование
-=
в событии в итоге вызывает вызов метода доступа «remove», который обычно использует -=
для делегата ... (по крайней мере, эффективно)
- Использование
-=
для делегата является синтаксическим сахаром для Delegate.Remove
Delegate.Remove
использует равенство делегатов - два экземпляра делегата равны, если у них одинаковый метод и один и тот же целевой экземпляр (например, методы)
Обратите внимание, что при использовании преобразования группы методов каждый раз при создании кода будет создаваться новый экземпляр делегата.