|
Программирование >> Обработка исключительных ситуаций
Глава 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, снабжающий своего отпрыска некоторыми полезными элементами, которые мы рассмотрим позже. Наследовать от делегата нельзя, да и нет смысла. Объявление делегата можно размещать непосредственно в пространстве имен или внутри класса.
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |