Делегаты, лямбды в C# и UniRx

Слайд 2

Что такое делегаты и сигнатура

Делегат – это указатель на метод. С помощью

Что такое делегаты и сигнатура Делегат – это указатель на метод. С
него из любого места в коде можно вызвать указанный метод.
Сигнатура метода – возвращаемый тип, и список типов всех аргументов этого метода.

Например, метод выше имеет сигнатуру “void, int, string”

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

Слайд 3

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

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

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

Слайд 5

Анонимные методы и лямбды

Методы, которые не имеют представления в классе, а сразу

Анонимные методы и лямбды Методы, которые не имеют представления в классе, а
создают экземпляр объекта в методе называются анонимными
Существует краткая запись анонимных методов, которые зовутся лямбда выражениями
(arg1, arg2) => arg1 + arg2 – лямбда выражение, которое можно использовать вместо метода Plus из предыдущего примера
Лямбды можно записывать по разному:

arg1 => arg1*5

() => CallSomeMethod()

(arg1, arg2) =>
{ int result = CallSomeMethod();
return result; }

Слайд 6

Action, Func, Predicate

В C# существуют унифицированные делегаты, которые можно сразу использовать (записывая

Action, Func, Predicate В C# существуют унифицированные делегаты, которые можно сразу использовать
как типы), не объявляя их
Action - возвращает void, может принимать сколько угодно аргументов
Func - возвращает returnType (стоит всегда в конце), принимает сколько угодно аргументов
Predicate - возвращает bool, принимает лишь 1 аргумент. Используется в большинстве случаев как фильтр, например в LINQ в методе Where, по факту является математическим предикатом

Слайд 7

Переделка примера под лямбды и Func

Переделка примера под лямбды и Func

Слайд 8

Полезные методы в UniRx

TimerFrame(int frames) – Создает покадровый таймер
TakeUntilDestroy(GameObject/Component target) – Уничтожает

Полезные методы в UniRx TimerFrame(int frames) – Создает покадровый таймер TakeUntilDestroy(GameObject/Component target)
таймер, если уничтожен данный объект/компонент
TakeUntilDisable(GameObject/Component target) – То же самое, но при выключении
TakeUntil(IObsevable timer) – Таймер будет работать, пока не истечёт таймер в аргументе этого метода
TakeWhile(Func predicate) – Таймер остановится, когда предикат выдаст false

Слайд 9

Полезные методы в UniRx

SkipUntil(IObservable timer) – Таймер не будет обрабатываться, пока внутренний

Полезные методы в UniRx SkipUntil(IObservable timer) – Таймер не будет обрабатываться, пока
таймер не окончится
SkipWhile(Func predicate) – Таймер не будет обрабатыватся, пока предикат выдает true
Finally(Action action) – Выполняет action когда таймер кончается или вообще уничтожается
Interval(TimeSpan period) – Повторяющийся таймер с указанным периудом
IntervalFrame(int frameCount, FrameCountType type) – Тоже самое, но по кадрам, можно указать на какие типы тиков ориетироватся (Update/FixedUpdate/EndOfFrame)
Имя файла: Делегаты,-лямбды-в-C#-и-UniRx.pptx
Количество просмотров: 54
Количество скачиваний: 0