Программирование >>  Обработка исключительных ситуаций 

1 ... 69 70 71 [ 72 ] 73 74 75 ... 142


Глава 10

Делегаты, события и потоки

выполнения

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

Делегаты

Делегат - это вид класса, предназначенный для хранения ссылок на методы. Делегат, как и любой другой класс, можно передать в качестве параметра, а зате\ вызвать инкапсулированный в нем метод. Делегаты используются для поддерж ки событий, а также как самостоятельная конструкция языка. Рассмотрим снача ла второй случай.

Описание делегатов

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

[ атрибуты ] [ спецификаторы ] delegate тип имяделегата ( [ параметры ] )

Спецификаторы делегата имеют тот же смысл, что и для класса, причем допуска ются только спецификаторы new, public, protected, internal и private.

Тип описывает возвращаемое значение методов, вызываемых с помощью делега та, а необязательными параметрами делегата являются параметры этих методо! Делегат может хранить ссылки на несколько методов и вызывать их поочередж естественно, что сигнатуры всех методов должны совпадать.



Глава 10

Делегаты, события и потоки

выполнения

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

Делегаты

Делегат - это вид класса, предназначенный для хранения ссылок на методы. Делегат, как и любой другой класс, можно передать в качестве параметра, а зате\ вызвать инкапсулированный в нем метод. Делегаты используются для поддерж ки событий, а также как самостоятельная конструкция языка. Рассмотрим снача ла второй случай.

Описание делегатов

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

[ атрибуты ] [ спецификаторы ] delegate тип имяделегата ( [ параметры ] )

Спецификаторы делегата имеют тот же смысл, что и для класса, причем допуска ются только спецификаторы new, public, protected, internal и private.

Тип описывает возвращаемое значение методов, вызываемых с помощью делега та, а необязательными параметрами делегата являются параметры этих методо! Делегат может хранить ссылки на несколько методов и вызывать их поочередж естественно, что сигнатуры всех методов должны совпадать.



Использование делегатов

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

Делегаты применяются в основном для следующих целей:

получения возможности определять вызываемый метод не при компиляции, а динамически во время выполнения программы;

обеспечения связи между объектами по типу источник - наблюдатель ;

создания универсальных методов, в которые можно передавать другие методы;

поддержки механизма обратных вызовов.

Все эти варианты подробно обсуждаются далее. Рассмотрим сначала пример реализации первой из этих целей. В листинге 10.1 объявляется делегат, с помощью которого один и тот же оператор используется для вызова двух разных методов (С001 и Hack).

Листинг 10.1. Простейшее использование делегата using System:

namespace ConsoleApplicationi

delegate void Del ( ref string s ); объявление делегата

class Classl

public static void C001 ( ref string s ) метод 1

string temp = ;

for ( int i = 0: i < s.Length: ++i )

Пример описания делегата: public delegate void D ( int i );

Здесь описан тип делегата, который может хранить ссылки на методы, возвращающие void и принимающие один параметр целого типа.

ПРИМЕЧАНИЕ-

Делегат, как и всякий класс, представляет собой тип данных. Его базовым классом является класс System.Delegate, снабжающий своего отпрыска некоторыми полезными элементами, которые мы рассмотрим позже. Наследовать от делегата нельзя, да и нет смысла.

Объявление делегата можно размещать непосредственно в пространстве имен или внутри класса.



1 ... 69 70 71 [ 72 ] 73 74 75 ... 142

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика