Делегати у Visual
Поряд із властивостями та методами класи та інтерфейси можуть мати делегати та події. Делегати представляють такі об'єкти, які вказують інші методи. При цьому делегати та методи, на які посилаються делегати, повинні мати ті ж параметри і той самий тип значення, що повертається. Створимо два делегати:
Тепер подивимося на прикладі іншого делегата:
Так як другий делегат посилається на функції з двома параметрами, то при виклику делегата ми повинні передати метод Invoke два значення.
Як і будь-який об'єкт, делегат можна використовувати як параметр методу:
Проте, ці приклади що неспроможні показати всю міць делегатів, оскільки ми цілком спокійно могли обійтися і них, викликавши безпосередньо методи. А найсильніша сторона делегатів полягає в тому, що вони служать як методи зворотного виклику, повідомляючи інші об'єкти про події, що відбулися. Отже, повернемося до наших класів, що описують клієнта банку, які ми розробили в попередніх розділах (у цьому випадку класи Employee та Manager опущені, оскільки вони нам не знадобляться):
Припустимо, у разі виведення грошей за допомогою методу Withdraw нам треба якось повідомляти про це самого клієнта і, можливо, інші об'єкти. Для цього створимо делегат AcoountState Handler. Щоб використати делегат, нам треба створити змінну цього делегата, а потім привласнити йому метод, який викликатиметься делегатом. Отже, додамо до класу Client наступні рядки:
Тут усе зрозуміло. Спочатку створюємо делегат, який вказуватиме на метод із параметром message типу String. Потім створюємо змінну делегату. І насамкінець створюємо метод, у якому відбуватиметься привласнення делегату посилання на метод. Тепер змінимо методWithdrawнаступним чином:
Тепер у головній програміпротестуємо роботу делегата:
Запустивши програму, ми отримаємо два різні повідомлення, які ми передали у коді класу Client:
У першому методі методCombineпоєднує делегати _del і del в один, який потім присвоюється змінною del. У другому методі методRemoveповертає делегат, зі списку викликів якого видалено делегат _del . Тепер перейдемо до основної програми: