30 июля 2014 г.

Немного о делегатах

Посмотрим на некоторые особенности делегатов.
Сравнение делегатов.
Два делегата будут равны если оба указывают на один и тот же метод. Для MulticastDelegate должен быть одинаков порядок вызова целевых методов.
Кстати, ключевое слово delegate в C# создает классы, производные от класса MulticastDelegate. Поэтому они сразу поддерживают операции += и -=.

Неизменяемость делегатов.
Делегат является неизменяемым типом, например при выполнении операции += или -= возвращается новый экземпляр делегата. Все почти как со строками) Так можно создавать новые делегаты, которые будут являться комбинацией имеющихся:


Приведение делегатов.
Делегаты нельзя приводить друг к другу (явно или неявно) даже если их сигнатуры совпадают.
Но можно передать экземпляр одного делегата в качестве аргумента в конструктор другого:


Исключения.
Если при вызове методов из списка делегата один из них выбросит исключение, то остальные методы вызываться не будут, исключение вернется в место вызова делегата.

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

Комментариев нет:

Отправить комментарий