void Func без аргументов
Есть несколько подобных вопросов, но не так, как у меня.
Существует ли эквивалент Func для функции без возвращаемого значения (т.е. Void) и без параметров?
Связанный с этим вопрос - Func ничего не возвращает? но это не отвечает за тип пустоты.
(Мне нужно, чтобы он запрашивал действия с моей модели просмотра на мой взгляд).
Ответы
Ответ 1
Ваша формулировка сбивает с толку. Возможно, вы имеете в виду "функцию без возвращаемого типа и без параметров". Существует просто System.Action.
Action action = () => Console.WriteLine("hello world");
action();
Из вашего комментария:
Но мне нужно заполнить тип <T>
в Action, и void не является возможностью (я отредактирую свой вопрос, я допустил ошибку).
Это указывает на недоразумение. T в делетете действия - это вход. Пустота - это выход. Делегат действия по сути является делегатом, возвращающим пустоту. T - тип ввода, на который он может воздействовать, параметры, которые вы должны были бы снабжать аргументами.
Во всяком случае, как показывает этот ответ и другие, у вас может быть делегат Action без T, делегат, который не принимает никаких данных.
Ответ 2
Да, существуют разные перегрузки Action
с различным количеством входных параметров и с типом возврата void
.
Action public delegate void Action()
Action<T> public delegate void Action<T>(T obj)
Action<T1,T2> public delegate void Action<T1,T2>(T1 arg1, T2 arg2)
Action<T1,T2,T3> public delegate void Action<T1,T2,T3>(T1 arg1, T2 arg2, T3 arg3)
...
Первая строка - это то, что вы ищете.
В версиях Newer Framework добавлены перегрузки с еще большим количеством аргументов. Максимальное количество аргументов:
- .NET Framework 2.0: 1
- .NET Framework 3.5: 4
- .NET Framework 4.0: 16
- Silverlight: 16
Действия всегда имеют тип возврата void
. Тип возврата void
не нужен и не может быть указан как параметр типового типа. Напротив, делегаты Func
определяют "реальные" типы возвращаемых данных и всегда имеют по крайней мере один общий тип типа для возвращаемого типа:
Func<TResult> public delegate TResult Func<TResult>()
Func<T,TResult> public delegate TResult Func<T,TResult>(T arg)
Func<T1,T2,TResult> public delegate TResult Func<T1,T2,TResult>(T1 arg1, T2 arg2)
...
Framework 4.0 добавил in
и out
модификаторов параметров универсального типа для контрвариации и ковариации. См.: Ковариация и контравариантность в дженериках. Примеры:
public delegate void Action<in T1, in T2>(T1 arg1, T2 arg2)
public delegate TResult Func<in T1, in T2, out TResult>(T1 arg1, T2 arg2)
Ответ 3
То, что вы ищете, - это действие. Он не принимает никаких параметров и не возвращает значения.