Страницы

Поиск по вопросам

среда, 22 мая 2019 г.

Навесить на поле класса анонимную функцию

Как организовать поле в классе, на которое можно будет потом навесить анонимную функцию? Мне нужно, чтобы в классе было поле, через которое я бы мог вызвать функцию, которая там определена
Есть класс Process, в нём есть поле Name и Duration. Есть класс ProcessQueue, в котором есть поле Items и ItemIndex. Так вот, я имитирую какие-либо процессы, указываю их название и продолжительность. Затем засовываю Process с заданными полями в очередь в поле ProcessQueue.Items. По окончанию процесса, должна сработать заданная пользователем функция. Я хочу засунуть эту функцию, скажем, в поле Process.Callback
Как засунуть туда функцию и как её потом вызвать?


Ответ

Для того, чтобы записать в поле класса функцию, всё равно анонимную или нет, вы должны создать поле делегатного типа. Для этого есть два основных пути: определение собственного делегата, или использование готового, имеющегося в системе. Предпочтительным методом является использование готового делегата.
Например, если ваш callback должен принимать один аргумент типа int и не возвращать никакого значения, вам подойдёт тип Action
Action callback;
Присваивание выглядит просто:
callback = n => Console.WriteLine($"работа окончена, результат: {n}");
Вызов тоже очевиден:
callback(5);

Комментариев нет:

Отправить комментарий