Событие - это член, который связывает пару методов добавления / удаления (*), каждый из которых принимает делегата, соответствующего сигнатуре события. По умолчанию компилятор C # будет автоматически определять поле делегата MultiCast для каждого события, а также добавлять и удалять члены, которые будут принимать переданный делегат и добавлять или удалять их в / из этого поля MulticastDelegate. Оператор myEvent += someMethod;
, когда он выполняется вне класса, определяющего событие, является обязательным синтаксическим сокращением, по существу, myEvent.AddHandler(someMethod)
и myEvent -= someMethod;
для myEvent.RemoveHandler(someMethod)
, за исключением того, что в C # нет способа вызвать add / remove методы, за исключением использования обозначений +=
и -=
.
При использовании нотации +=
и -=
в классе, который определяет событие, все немного сложнее, поскольку поле, определенное автоматически сгенерированным кодом события, имеет то же имя, что и событие, и поведение myEvent += someMethod;
зависит от версии C #.
(*) Технически трио, поскольку событие также включает в себя метод «повышения», но на практике этот метод практически никогда не используется.