Делегаты. Общие сведения
Делегат – это специальный объект, который «указывает» на метод или несколько методов. Эти методы могут быть вызваны позднее посредством делегата. Делегат должен иметь точно такой же синтаксис, что и метод при объявлении (то есть возвращать или не возвращать то же значение, что и метод и принимать или не принимать те же самые параметры). Работа с делегатом очень схожа с работой с классом. · Для того, чтобы делегат указал на статический метод (при чем метод объявлен в классе, в котором вызывается делегат), то мы просто создаем объект делегата и в скобках указываем название метода: · Для того, чтобы делегат указал на нестатический метод (при чем метод объявлен вне класса, в котором вызывается делегат), то мы сначала создаем объект этого другого класса, потом объект делегата и в скобках обращаемся к методу через объект класса (имя объекта, точка, название метода): Пример для чего используются делегаты (к примеру для быстрого и удобного переключения между методами). Расход бензина на определенное расстояние, алгоритм создания: 1. Создаем класс Car, специальный конструктор (параметры: модель машини, уровень бензина в баке, расход на 100 км), метод (параметр: дистанция), который подсичтает, сколько осталось в баке. 2. Создаем второй класс, создаем 2 метода (параметры: уровень топлива в баке, расход на 1 км, дистанция). 3. Объявляем делегат в классе Car, в конструкторе инициализируем его, в методе Drive используем уже не другой метод, а делегат. И соответственно меняется реализация в основном методе Main. 1. Для начала создадим класс, в котором есть специальный конструктор (задает название машины, уровень бензина, расход на 100 км) и метод (пользователь задает дистанцию, метод подсчитывает, сможет ли проехать машина).
2. Теперь добавим класс в нашу программу, в котором будут 2 метода, которые подсчитывает остаток топлива в баке в нормальную и ветреннюю погоду (результат не поменяется): 3. Объявляем делегат в классе Car, в конструкторе инициализируем его, в методе Drive используем уже не другой метод, а делегат. И соответственно меняется реализация в основном методе Main. Можно не в конструкторе, а в методе использовать делегат: Итог: Делегаты могут использоваться в ситуации, когда есть 1 метод одного класса, 2 метода (с одинаковыми параметрами и возвращаемым значением) другого класса. Мы можем создать в первом классе делегат, который указывает на эти 2 метода. Тогда добавив этот делегат в качестве параметра в метод первого класса, мы сможем, при вызове этого метода в основной функции Main, указать в скобках, какой из двух методов использовать. Делегат может указывать на несколько методов одновременно. То есть при вызове делегата будут выполняться сразу все методы, на которые он указывает. Такая особенность реализуется следующим образом: Важно: Если мы возвращаем какое-либо значение в каждом из методов, то в итоге вернется значение последнего метода, использованого в Main.
|