КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Пример делегата для работы с несколькими методами
MulticastDelegate.GetInvocationList Возвращает список делегатов, находящихся в списке вызовов делегата.
Существует два недостатка механизма вызова функций, связанных с делегатом. И оба они связаны со случаем, когда в списке вызова делегата присутствует более одной функции.
namespace ConsoleApplication1 { class Program { //объявление делегата delegate void MyDelegate(string s); // Первый метод, на который мы будем ссылаться при помощи // делегата. Именно он будет вызывать исключение, // не позволяющее обратиться ко второму методу. static void f1(string s) { // Выведем значение переданного параметра, // а также уведомим пользователя о том, что данный // метод был вызван. Console.WriteLine("Функция 1 вызвана с параметром = {0}",s); // Преднамеренно выбросим исключение. throw new Exception(); } // Второй метод, на который мы будем ссылаться из делегата. static void f2(string s) { // Сообщим пользователю о том, что метод // был вызван, а также выведем значение переданного параметра. Console.WriteLine("Функция 2 вызывана с параметром = {0}",s); } static void Main(string[] args) {
MyDelegate del = new MyDelegate(f1); // Присоединим к нему еще одну функцию. del += new MyDelegate(f2); // Последовательно пройдем по каждому делегату, входящему // в список вызова ранее созданного делегата. foreach (MyDelegate d in del.GetInvocationList()) { // вызов функции - в защищенный блок! try { d("Hello"); } // Это блок обработки исключений, произошедших // в защищенном блоке. catch(Exception ex) { // Сообщим пользователю о том, что при попытке // вызова одной из функций произошло исключение. Console.WriteLine("Oh mama, была обнаружена исключительная ситуация!"); } } Console.ReadKey(); } }} 2. Делегат как оповещатель. Паттерн «наблюдатель» Паттерн – шаблон проектирования (одна и та жа схема организации и взаимодействия объектов в различных ситуациях). Существует несколько паттернов программирования, одним из которых является «паттерн наблюдатель».
Наблюдатель2 … Наблюдатель n Изменил состояние – послал всем наблюдателям извещение
Дата добавления: 2014-01-20; Просмотров: 433; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |