Этот пост весьма актуален для справочной информации.У события есть три метода доступа: добавить, удалить и поднять.Соответственно добавить обработчик события, удалить его и вызвать событие.Компилятор генерирует его автоматически, когда вы не пишете аксессор явно.
Компилятор C ++ / CLI автоматически генерирует аксессор повышения, если вы его не пишете.Он использует шаблон, который вы видите в коде C # с вспомогательной переменной, которая избегает исключения нулевой ссылки.Так же, как вы видите это в связанном посте.По какой-то таинственной причине язык C # не делает этого.Он даже не позволяет вам определить свой собственный аксессор, вы должны сами поднять событие.Заставляет вас писать код с помощью вспомогательной переменной.
Понятия не имею, почему команда C # приняла это решение.Как правило, команда настоятельно рекомендует избегать автоматически сгенерированного кода, который замедляет выполнение.Принцип C ++ «вы не платите за то, что не используете».Конечно, во многих случаях безопасность потоков не требуется, например, любые события в коде GUI.Это чертовски сложный случай, учитывая низкую стоимость и тот факт, что код GUI в любом случае содержит шаблон.Однако низкоуровневая блокировка в библиотеках C ++ встречается часто.