Анонимные методы в C#

Анонимные методы в C#

В завершение этой главы мы рассмотрим некоторые связанные с делегатами и событиями возможности .NET 2.0 через призму возможностей C#. Для начала обратим внимание на то, что в случае, когда вызывающей стороне требуется осуществлять прием поступающих событий, необходимо определить уникальный метод, отвечающий виду соответствующего делегата.

class SomeCaller {

 static void Main(string[] args) {

  SomeType t = new SomeType();

  t.SomeEvent += new SomeDelegate(MyEventHandler);

 }

 // Как правило, вызывается только объектом SomeDelegate.

 public static void MyEventHandler() {…}

}

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

Чтобы разрешить эту проблему, теперь позволяется ассоциировать делегат непосредственно с блоком операторов программного кода при регистрации события. Формально такой программный код называется анонимным методом. В качестве иллюстрации базового синтаксиса рассмотрите следующий метод Main(), в кото-рам посылаемые типом Car события обрабатываются о помощью анонимных методов, а не специальных именованных программ обработки событий.

class Program {

 static void Main(string[] args) {

  Console.WriteLine("***** Анонимные методы ***** ");

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

  // Регистрация обработчиков событий с помощью

  // анонимных методов.

  c1.AboutToBlow += delegate {

   Console.WriteLine("Оx! Едем слишком быстро!");

  };

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

   Console.WriteLine("Сообщение от Car: {0}", e.msg);

  };

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

   Console.WriteLine("Фатальное сообщение от Car: {0}", e.msg);

  };

  …

 }

}

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

Обратите вниманий на то, что тип Program уже не определяет конкретные статические программы обработки событий, такие как, например, CarAboutToBlow() и CarExploded(). Вместо этого здесь указаны безымянные (т.е. анонимные) методы, определяемые "внутристрочно" в тот момент, когда вызывающая сторона обрабатывает событие, используя синтаксис +=.

Базовый синтаксис анонимного метода соответствует следующему представлению в псевдокоде.

class SomeCaller {

 static void Main(string[] args) {

  SomeType t = new SomeType();

  t.SomeEvent += delegate(необязательныеАргументыДелегата) { /* операторы */};

 }

}

В предыдущем варианте метода Main() следует обратить внимание на то, что при обработке первого события AboutToBlow мы не определяем аргументы, передаваемые делегатом.

c1.AboutToBlow += delegate {

 Console.WriteLine("Ox! Едем слишком быстро!");

};

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

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

 Console.WriteLine("Важное сообщение от Car: {0}", e.msg);

};

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

Методы и их результаты

Из книги Сущность технологии СОМ. Библиотека программиста автора Бокс Дональд

Методы и их результаты Результаты методов – это одна из сторон СОМ, где логический и физический миры расходятся. В сущности, все методы СОМ физически возвращают номер ошибки с типом НRESULT. Использование одного типа возвращаемого результата позволяет удаленной


Истинные имена и анонимные системы

Из книги Криптоанархия, кибергосударства и пиратские утопии автора Ладлоу Питер

Истинные имена и анонимные системы Нужно сказать несколько слов о роли анонимности и цифровых псевдонимов. Хотя, конечно, это тема для отдельной статьи.Действительно ли нужны истинные имена? Почему их хотят знать? Есть ли у государства имеющие силу основания требовать их


1. Методы

Из книги Информатика и информационные технологии: конспект лекций автора Цветкова А В

1. Методы Описание метода внутри объектного типа соответствует опережающему описанию метода (forward). Таким образом, где-нибудь после описания объектного типа, но внутри той же самой области действия, что и область действия описания объектного типа, метод должен


29. Методы

Из книги Информатика и информационные технологии автора Цветкова А В

29. Методы Описание метода внутри объектного типа соответствует опережающему описанию метода (forward). Таким образом, где-нибудь после описания объектного типа, но внутри той же самой области действия, что и область действия описания объектного типа, метод должен


1.1.7. Методы

Из книги Интернет решения от доктора Боба автора Сворт Боб

1.1.7. Методы Компонент TUUCode имеет три метода; один public конструктор, один protected метод и один public метод:Конструктор Create используется для создания компонента и инициализации свойств ао умолчанию (default) для Active, FileMode, Headers и About.Метод Activate используется для вызова метода UUCode во


Анонимные каналы

Из книги Системное программирование в среде Windows автора Харт Джонсон М

Анонимные каналы Анонимные каналы (anonymous channels) Windows обеспечивают однонаправленное (полудуплексное) посимвольное межпроцессное взаимодействие. Каждый канал имеет два дескриптора: дескриптор чтения (read handle) и дескриптор записи (write handle). Функция, с помощью которой создаются


Методы

Из книги Справочник по JavaScript автора Коллектив авторов

Методы clear()Этот метод предназначен для очистки текущего документа из окна браузера.close()Заставляет Web-страницу немедленно обновить свое содержимое после использования методов write. Метод не принимает параметров и не возвращает значения.createAttribute()createAttribute( "Имя Атрибута"


Методы

Из книги Как пользоваться Интернетом после принятия закона «Об Интернете» автора Халявин Василий

Методы alert()alert({Текст})Выводит на экран окно предупреждения с текстом, переданным в качестве параметра.back()Возвращается к предыдущему документу, как если бы на панели инструментов нажали кнопку Назад.Поддерживается только NN начиная с 4.0blur()Удаляет фокус с


Методы

Из книги Анонимность и безопасность в Интернете. От «чайника» к пользователю автора Колисниченко Денис Николаевич

Методы loadload({Адрес файла нового документа}, {Новая ширина слоя в пикселах})Позволяет заменить содержимое слоя. В качестве первого параметра принимается интернет-адрес документа, который будет отображен в текущем слое. В качестве второго параметра указывается новая


1.3. Анонимные прокси-серверы: сокрытие IP-адреса и местонахождения

Из книги автора

1.3. Анонимные прокси-серверы: сокрытие IP-адреса и местонахождения С помощью анонимайзера скрывается не только ваш IP-адрес, но и ваше местонахождение, определяемое по IP-адресу. Но иногда нужно скрыть местонахождение более гибко, а именно – получить IP-адрес определенной


2.2. Tor или анонимные прокси-серверы и анонимайзеры. Кто кого?

Из книги автора

2.2. Tor или анонимные прокси-серверы и анонимайзеры. Кто кого? Если вам понятен принцип работы Tor, то ее преимущества тоже должны быть ясны, но на всякий случай сравним Tor с анонимными прокси-серверами и анонимайзерами:? анонимайзеры и анонимные прокси не шифруют передаваемые


Методы

Из книги автора

Методы Методы представляют собой процедуры и функции, объявленные внутри класса или записи. Особыми разновидностями методов являются конструкторы, деструкторы и перегруженные операции.Определение методов можно давать как внутри класса (стиль Java, C#, C++), так и вне класса


Методы Any, All

Из книги автора

Методы Any, All Описание методовМетоды приведены для последовательности sequence of T. function Any(): boolean; Проверяет, содержит ли последовательность какие-либо элементы. function Any(predicate: T->boolean): boolean; Проверяет, удовлетворяет ли какой-либо элемент последовательности заданному


Методы Min, Max

Из книги автора

Методы Min, Max Описание методовМетоды приведены для последовательности sequence of T. function Min(): число; Вычисляет минимальный элемент последовательности значений числового типа. function Min(selector: T->число): число; Вызывает функцию преобразования для каждого элемента