Как мне прочитать этот код c # - Action <object>actDelegateTakeObjAsParam = (Action <object>) (obj => actionImp ()); - PullRequest
0 голосов
/ 27 сентября 2018

Пример чего-то, что я нашел в коде Mvvm.

Action<object> actDelegateTakeObjAsParam = (Action<object>) (obj => actionImp());

Мне кажется, я понимаю, что он делает, но у меня проблемы с синтаксисом.

1 Ответ

0 голосов
/ 27 сентября 2018
Action<object> actDelegateTakeObjAsParam

объявляет переменную с именем actDelegateTakeObjAsParam типа Action<object> (делегат, который принимает object и возвращает void, т.е. не возвращает значения).

= (Action<object>)(obj => actionImp());

Назначитьэто экземпляр делегата типа Action<object>, где экземпляр делегата принимает параметр obj, игнорирует его и вызывает actionImp() (что бы это ни было).

По сути, он выглядит так, как будто переупаковываетделегировать как другой тип - возможно, actionImp на самом деле Action, ThreadStart или MethodInvoker (все из которых не имеют параметров и не возвращают значение) или Func<string> (без параметров, но возвращает string);это позволяет использовать намерение actionImp, как если бы оно было Action<object>.

Незначительное примечание: поскольку obj игнорируется, недавнее соглашение будет использовать _ вместо objкак имя, то есть _ => actionImp()

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