#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, а как насчет функции?