Izibook.club
Читать онлайн книги!
  • Главная
  • Жанры
  • Авторы
  • ТОП книг
  • ТОП авторов
  • Контакты

Язык программирования C#9 и платформа .NET5

Часть 246 из 642 Информация о книге

public class Car

{

...

  public event EventHandler<CarEventArgs> Exploded;

  public event EventHandler<CarEventArgs> AboutToBlow;

}

Затем в вызывающем коде тип

EventHandler<CarEventArgs>
можно использовать везде, где ранее указывался
CarEngineHandler
(или снова применять групповое преобразование методов):

Console.WriteLine("***** Prim and Proper Events *****\n");

// Создать объект Car обычным образом.

Car c1 = new Car("SlugBug", 100, 10);

// Зарегистрировать обработчики событий.

c1.AboutToBlow += CarIsAlmostDoomed;

c1.AboutToBlow += CarAboutToBlow;

EventHandler<CarEventArgs> d = CarExploded;

c1.Exploded += d;

...

Итак, к настоящему моменту вы узнали основные аспекты работы с делегатами и событиями в С#. Хотя этого вполне достаточно для решения практически любых задач, связанных с обратными вызовами, в завершение главы мы рассмотрим несколько финальных упрощений, в частности анонимные методы и лямбда-выражения.

Понятие анонимных методов C#

Как было показано ранее, когда вызывающий код желает прослушивать входящие события, он должен определить специальный метод в классе (или структуре), который соответствует сигнатуре ассоциированного делегата. Ниже приведен пример:

SomeType t = new SomeType();

// Предположим, что SomeDeletage может указывать на методы,

// которые не принимают аргументов и возвращают void.

t.SomeEvent += new SomeDelegate(MyEventHandler);

// Обычно вызывается только объектом SomeDelegate.

static void MyEventHandler()

{

  // Делать что-нибудь при возникновении события.

}

Однако если подумать, то такие методы, как

MyEventHandler()
, редко предназначены для вызова из любой другой части программы кроме делегата. С точки зрения продуктивности вручную определять отдельный метод для вызова объектом делегата несколько хлопотно (хотя и вполне допустимо).

Для решения указанной проблемы событие можно ассоциировать прямо с блоком операторов кода во время регистрации события. Формально такой код называется анонимным методом. Чтобы ознакомиться с синтаксисом, создайте новый проект консольного приложения по имени

AnonymousMethods
, после чего скопируйте в него файлы
Car.cs
и
CarEventArgs.cs
из проекта
CarEvents
(не забыв изменить пространство имен на
AnonymousMethods
). Модифицируйте код в файле
Program.cs
, как показано ниже, для обработки событий, посылаемых из класса
Car
, с использованием анонимных методов вместо специальных именованных обработчиков событий:

using System;

using AnonymousMethods;

Console.WriteLine("***** Anonymous Methods *****\n");

Car c1 = new Car("SlugBug", 100, 10);

// Зарегистрировать обработчики событий как анонимные методы.

c1.AboutToBlow += delegate

{

  Console.WriteLine("Eek! Going too fast!");

};

c1.AboutToBlow += delegate(object sender, CarEventArgs e)

{

  Console.WriteLine("Message from Car: {0}", e.msg);

};

c1.Exploded += delegate(object sender, CarEventArgs e)

{

  Console.WriteLine("Fatal Message from Car: {0}", e.msg);

};

// В конце концов, этот код будет инициировать события.

for (int i = 0; i < 6; i++)

{

  c1.Accelerate(20);

}

Console.ReadLine();

На заметку! После финальной фигурной скобки в анонимном методе должна быть помещена точка с запятой, иначе возникнет ошибка на этапе компиляции.

И снова легко заметить, что специальные статические обработчики событий вроде

CarAboutToBlow()
или
CarExploded()
в вызывающем коде больше не определяются. Взамен с помощью синтаксиса
+=
определяются встроенные неименованные (т.е. анонимные) методы, к которым вызывающий код будет обращаться во время обработки события. Базовый синтаксис анонимного метода представлен следующим псевдокодом:

НекоторыйТип t = new НекоторыйТип();

t.НекотороеСобытие += delegate (необязательноУказываемыеАргументыДелегата)

{ /* операторы */ };

Обратите внимание, что при обработке первого события

AboutToBlow
внутри предыдущего примера кода аргументы, передаваемые из делегата, не указывались:

c1.AboutToBlow += delegate

{

  Console.WriteLine("Eek! Going too fast!");

};

Строго говоря, вы не обязаны принимать входные аргументы, отправленные специфическим событием. Но если вы хотите задействовать эти входные аргументы, тогда понадобится указать параметры, прототипированные типом делегата (как показано во второй обработке событий

AboutToBlow
и
Exploded
). Например:

Перейти к странице:
Предыдущая страница
Следующая страница
Жанры
  • Военное дело 4
    • Спецслужбы 4
  • Деловая литература 201
    • Банковское дело 3
    • Деловая литература 2
    • Корпоративная культура 13
    • Личные финансы 20
    • Малый бизнес 2
    • Маркетинг, PR, реклама 44
    • О бизнесе популярно 111
    • Отраслевые издания 2
    • Управление, подбор персонала 17
    • Ценные бумаги, инвестиции 3
    • Экономика 28
  • Детективы и триллеры 2748
    • Боевики 313
    • Дамский детективный роман 21
    • Детективы 424
    • Иронические детективы 181
    • Исторические детективы 413
    • Классические детективы 221
    • Криминальные детективы 155
    • Крутой детектив 118
    • Маньяки 15
    • Медицинский триллер 2
    • Политические детективы 44
    • Полицейские детективы 233
    • Прочие Детективы 813
    • Техно триллер 3
    • Триллеры 1191
    • Шпионские детективы 101
  • Детские 490
    • Детская образовательная литература 13
    • Детская проза 163
    • Детские остросюжетные 53
    • Детские приключения 259
    • Детские стихи 21
    • Детский фольклор 1
    • Книга-игра 1
    • Прочая детская литература 76
  • Детские книги 526
    • Детская фантастика 195
    • Детские детективы 3
    • Книги для подростков 23
    • Сказки 261
  • Документальная литература 806
    • Биографии и мемуары 529
    • Военная документалистика 7
    • Искусство и Дизайн 14
    • Критика 11
    • Научпоп 9
    • Прочая документальная литература 73
    • Публицистика 256
  • Дом и Семья 214
    • Домашние животные 14
    • Здоровье и красота 34
    • Кулинария 33
    • Прочее домоводство 8
    • Развлечения 3
    • Сад и Огород 8
    • Сделай сам 2
    • Спорт 9
    • Хобби и ремесла 7
    • Эротика и секс 110
  • Драматургия 109
    • Драма 106
    • Киносценарии 3
    • Мистерия 1
    • Трагедия 1
  • Жанр не определен 8
    • Разное 8
  • Компьютеры и Интернет 15
    • Базы данных 3
    • Интернет 3
    • Программирование 1
    • Программное обеспечение 1
    • Прочая компьютерная литература 10
  • Любовные романы 26532
    • Исторические любовные романы 951
    • Короткие любовные романы 2664
    • Любовно-фантастические романы 11030
    • Остросюжетные любовные романы 979
    • Порно 90
    • Прочие любовные романы 56
    • Слеш 416
    • Современные любовные романы 10958
    • Фемслеш 44
    • Эротика 6531
  • Научно-образовательная 372
    • Альтернативная медицина 5
    • Астрономия и Космос 7
    • Биология 32
    • Биофизика 2
    • Биохимия 2
    • Ботаника 3
    • Военная история 4
    • Геология и география 3
    • Государство и право 1
    • Детская психология 15
    • Зоология 3
    • Иностранные языки 2
    • Культурология 46
    • Литературоведение 20
    • Медицина 35
    • Обществознание 7
    • Педагогика 20
    • Политика 22
    • Прочая научная литература 58
    • Психотерапия и консультирование 50
    • Религиоведение 7
    • Секс и семейная психология 30
    • Технические науки 4
    • Физика 9
    • Философия 34
    • Химия 3
    • Экология 3
    • Юриспруденция 9
    • Языкознание 18
  • Образование 522
    • Бизнес 45
    • Биография и мемуары 46
    • Здоровье 10
    • История 296
    • Карьера 4
    • Психология 230
  • Поэзия и драматургия 41
    • Басни 2
    • Драматургия 10
    • Лирика 2
    • Поэзия 30
  • Приключения 756
    • Вестерны 14
    • Исторические приключения 415
    • Морские приключения 77
    • Природа и животные 31
    • Прочие приключения 212
    • Путешествия и география 52
  • Проза 2401
    • Антисоветская литература 5
    • Афоризмы 1
    • Военная проза 111
    • Историческая проза 321
    • Классическая проза 132
    • Контркультура 13
    • Магический реализм 92
    • Новелла 14
    • Повесть 24
    • Проза прочее 21
    • Рассказ 73
    • Роман 103
    • Русская классическая проза 72
    • Семейный роман/Семейная сага 3
    • Сентиментальная проза 10
    • Советская классическая проза 47
    • Современная проза 1847
    • Эпистолярная проза 2
    • Эпопея 5
    • Эссе, очерк, этюд, набросок 3
  • Прочее 1517
    • Газеты и журналы 5
    • Изобразительное искусство, фотография 12
    • Кино 13
    • Музыка 11
    • Подростковая литература 6
    • Театр 5
    • Фанфик 1470
  • Религия и духовность 361
    • Астрология 1
    • Буддизм 4
    • Православие 1
    • Прочая религиозная литература 4
    • Религия 24
    • Самосовершенствование 136
    • Хиромантия 1
    • Эзотерика 211
    • Язычество 1
  • Справочная литература 41
    • Прочая справочная литература 3
    • Путеводители 9
    • Руководства 12
    • Справочники 15
    • Энциклопедии 9
  • Старинная литература 150
    • Античная литература 1
    • Древневосточная литература 5
    • Мифы. Легенды. Эпос 34
    • Прочая старинная литература 111
  • Техника 2
    • Автомобили и ПДД 1
    • Архитектура 1
  • Фантастика и фентези 28563
    • Альтернативная история 4173
    • Боевая фантастика 5364
    • Героическая фантастика 1485
    • Городское фэнтези 2281
    • Готический роман 13
    • Детективная фантастика 751
    • Ироническая фантастика 102
    • Ироническое фэнтези 83
    • Историческое фэнтези 531
    • Киберпанк 317
    • Космическая фантастика 1810
    • Космоопера 56
    • ЛитРПГ 1330
    • Любовная фантастика 186
    • Любовное фэнтези 115
    • Мистика 518
    • Научная фантастика 928
    • Попаданцы 9476
    • Постапокалипсис 910
    • Сказочная фантастика 26
    • Социально-философская фантастика 542
    • Стимпанк 151
    • Технофэнтези 142
    • Ужасы 103
    • Ужасы и мистика 821
    • Фантастика 254
    • Фантастика: прочее 231
    • Фэнтези 11562
    • Эпическая фантастика 235
    • Юмористическая фантастика 1073
    • Юмористическое фэнтези 1670
  • Фольклор 7
    • Загадки 1
    • Народные сказки 5
    • Фольклор: прочее 2
  • Юмор 193
    • Анекдоты 1
    • Комедии 1
    • Прочий юмор 66
    • Сатира 3
    • Юмористическая проза 123
    • Юмористические стихи 5
Izibook.club

Бесплатная онлайн библиотека для чтения книг без регистрации с телефона или компьютера. У нас собраны последние новинки, мировые бестселлеры книжного мира.

Контакты
  • pereezdsayta@yandex.ru
Информация
  • Карта сайта
© izibook.club, 2026. | Вход
Этот сайт использует cookie для хранения данных. Продолжая пользоваться сайтом, вы даете свое согласие на работу с этими данными в соответствии с нашей политикой конфиденциальности.
Я согласен