АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция

Делегаты

Читайте также:
  1. Что объединяет события, делегаты и свойства

Для реализации обратных вызовов в 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; }

 

 


 


1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |

Поиск по сайту:



Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.003 сек.)