Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
CSharp_Prog_Guide.doc
Скачиваний:
16
Добавлен:
16.11.2019
Размер:
6.22 Mб
Скачать

Надежное программирование

  • Объявление делегата.

Следующий оператор объявляет новый типа делегата.

public delegate void ProcessBookDelegate(Book book);

Каждый тип делегата описывает число и типы аргументов, а также тип возвращаемого значения методов, которые могут быть им инкапсулированы. Каждый раз, когда требуется новый набор типов аргументов или тип возвращаемого значения, необходимо объявить новый тип делегата.

  • Создание экземпляра делегата

После объявления типа делегата необходимо создать объект делегата и связать его с определенным методом. В предыдущем примере это выполняется путем передачи метода PrintTitle в метод ProcessPaperbackBooks, как показано в следующем примере:

bookDB.ProcessPaperbackBooks(PrintTitle);

Это создает новый объект делегата, связанный со статическим методом Test.PrintTitle. Подобным образом передается не статический метод AddBookToTotal объекта totaller, как показано в следующем примере:

bookDB.ProcessPaperbackBooks(totaller.AddBookToTotal);

В обоих случаях новый объект делегата передается в метод ProcessPaperbackBooks.

После создания делегата метод, с которым он связан, никогда не изменится; объекты делегатов являются неизменяемыми.

  • Вызов делегата.

После создания объекта делегата, он, как правило, передается в другой код, который вызовет делегат. Объект делегата вызывается при помощи имени объекта делегата, после которого следуют параметризованные аргументы, передаваемые в делегат. Ниже приведен пример вызова делегата.

processBook(b);

Делегат может быть вызван синхронно (как в этом примере), или асинхронно при помощи методов BeginInvoke и EndInvoke.

Events

Events enable a class or object to notify other classes or objects when something of interest occurs. The class that sends (or raises) the event is called the publisher and the classes that receive (or handle) the event are called subscribers.

In a typical C# Windows Forms or Web application, you subscribe to events raised by controls such as buttons and list boxes. You can use the Visual C# integrated development environment (IDE) to browse the events that a control publishes and select the ones that you want to handle. The IDE automatically adds an empty event handler method and the code to subscribe to the event.

Events Overview

Events have the following properties:

  • The publisher determines when an event is raised; the subscribers determine what action is taken in response to the event.

  • An event can have multiple subscribers. A subscriber can handle multiple events from multiple publishers.

  • Events that have no subscribers are never called.

  • Events are typically used to signal user actions such as button clicks or menu selections in graphical user interfaces.

  • When an event has multiple subscribers, the event handlers are invoked synchronously when an event is raised.

  • Events can be used to synchronize threads.

  • In the .NET Framework class library, events are based on the EventHandler delegate and the EventArgs base class.