Страницы

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

четверг, 5 марта 2020 г.

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

#c_sharp


Как организовать поле в классе, на которое можно будет потом навесить анонимную функцию?
Мне нужно, чтобы в классе было поле, через которое я бы мог вызвать функцию, которая
там определена

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

Как засунуть туда функцию и как её потом вызвать?
    


Ответы

Ответ 1



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

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

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