|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Делегаты
Для реализации обратных вызовов в C# используется новая разновидность пользовательских типов - delegate (делегат). C помощью данного типа описываются типы данных, которые могут хранить ссылки на методы с заданной сигнатурой. C использование ключевого слова delegate можно описать новый тип. – Новый тип можно описать с помощью класса: class xxxx {...} – И новый тип можно описать с помощью делегата: delegate <сигнатура> Тип delegate поддерживает три важных элемента информации: – Адрес метода на который он ссылается. – Параметры (если они есть) данного метода. – Возвращаемое методом значение. Пример работы с делегатом // объявление нового типа ссылок на методы public delegate int MyFunc(int n); // объявление о переменной – ссылке на метод MyFunc rf = new MyFunc (Calc); // или rf = Calc; // вызов метода с помощью ссылки int k = f(5); ... public static int Calc (int n) { … } Стандартные делегаты • В библиотеке FCL описаны стандартные обобщенные делегаты, которые активно используются в методах классов библиотеки: • System.Action() – принимает значение (или значения) и ничего не возвращает; public delegate void Action<T>(T obj) • System.Comparison() – принимает два параметра и возвращает целое значение (< 0: x < y; 0: x == y; > 0: x > y) public delegate int Comparison<T>(T x, T y) • System.Converter() – преобразование объекта из одного типа в другой public delegate TOutput Converter<TInput, Toutput> (TInput input) • System.EventHandler – обработчик событий public delegate void EventHandler<TEventArgs> (Object sender, TEventArgs e) where TEventArgs: EventArgs • System.Func() – принимает значение (или значения) и возвращает результат public delegate TResult Func<T, TResult>(T arg) • System.Predicate() – принимает значение и возвращает bool public delegate bool Predicate<T>(T obj) Лямбда выражения это анонимные методы (функции), которые могут содержать выражения и операторы и могут использоваться для создания делегатов или деревьев выражений (expression tree types).Все lambda выражения используют лямбда операция =>, который читается как "перейти к". • Например, лямбда выражение x => x * x читается, как "x переходит к x умноженному на x." • Данное лямбда выражение может быть присвоено типу delegate следующим образом: delegate int del(int i); static void Main(string[] args) { del myDelegate = x => x * x; int j = myDelegate(5); //j = 25 } • Способ записи (int x) => x + 1; // is the same as (int x) => { return x + 1; }
Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.003 сек.) |