|
|||||||
Event \ Delegate
Время создания: 13.07.2020 20:25
Раздел: Компьютер - C# - Вопросы на программиста
Запись: Kozlov-AE/Tetra/master/base/1594661150m4emag5b31/text.html на raw.githubusercontent.com
|
|||||||
|
|||||||
Делегаты события Одним из любимых вопросов на понимание .net платформы является вопрос про события и делегаты. В лучшем случае спрашивают отличия, в худшем могут задать такой вопрос на засыпку. public class A { public void OnDoWork() { if ( DoWork != null ) DoWork(this, EventArgs.Empty); } public event EventHandler DoWork; } 1. Что будет с программой, если класс A видоизменить так: убрать ключевое слово event? 2. Что будет с программой, если вообще во всем коде убрать ключевые слова event? синтаксические отличия применимости событий от делегатов: 0. Событие — это тот же самый делегат, который наделяется некоторыми свойствами через слово event. 1. И событие и делегат можно объявить полем класса, но в отличие от делегата, событие не может быть локальной переменной метода (особо не роляет, но помнить стоит) 2. Событие нельзя запустить вне класса, в котором оно было объявлено (это самое важное отличие!!!) 3. Интерфейс не может содержать поля. 4. Событие всегда объявляется как «поле», а не свойство (add-remove не в счет). Итак, если у нас есть интерфейс, в котором объявлено событие, и мы убираем ключевое слово event, то у нас возникает ошибка компилятора — дескать, интерфейс не может содержать поля (а именно полем-делегатом стало бывшее событие). Но если событие объявлено как поле класса, то с точки зрения компилятора будет совершенно корректно убрать ключевое слово. Поэтому ответы на вопросы будут такие: 1. Ничего не изменится 2. Ничего не изменится, если только в программе нет объявленных в интерфейсах событий. |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|