Тип действия C# может возвращать тип?

#c# #delegates #action

Вопрос:

Я смотрю на код и вижу, как он говорит

 public Action<MainViewModel, MainViewModel> SetView { get; }
 

Указывает ли это на то, что действие SetView что-то получает? Я думал, что типы действий всегда пусты?

Кроме того, что (ViewModel.SetView) означает эта часть? является ли этот тип приведением к а SetView ?

 SetView = new Action<MainViewModel,MainViewModel>(ViewModel.SetView)
 

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

1. Вообще говоря, Action<T> ничего не возвращает. Func<T> делает.

2. Does this indicate that the Action SetView is receiving something? Это указывает на то, что setView возвращает Action<MainViewModel, MainViewModel> объект.

Ответ №1:

Action тип может передавать только параметры. Если вы хотите вернуть значение, то вы можете использовать Func<> .

В вашем примере SetView это свойство, которое принимает значение an Action<MainViewModel,MainViewModel> , что означает, что свойство должно быть установлено в метод, который принимает 2 модели MainViewModels в качестве параметров, так что что-то вроде:

 void MyMethod(MainViewModel model1, MainViewModel model2)
{ ... }
 

За исключением того, что ваш-просто добытчик, поэтому я предполагаю, что он был установлен в конструкторе.

Чтобы ответить на ваш дальнейший вопрос, это прототип действия<T1,T2>:

 public delegate void Action<in T1,in T2>(T1 arg1, T2 arg2);
 

setView = новое действие<MainViewModel,MainViewModel>(Модель просмотра.setView);

Это вызов метода set в свойстве setView с помощью метода (ViewModel.setView), который принимает 2 параметра MainViewModel.

Возможно ли, что у вас есть свойство setView в одном классе и функция setView в классе модели представления?

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

1. Спасибо за объяснение, не могли бы вы объяснить эту часть SetView = new Action<MainViewModel,MainViewModel>(ViewModel.SetView) , я бы ожидал, что это будет SetView = new Action<MainViewModel,MainViewModel> FunctionName(Parameter) , но есть только модель представления параметров. setView, а как насчет функции?