Все делегаты Func возвращают значение. Какие делегаты .NET могут использоваться с методами, возвращающими void?
Все делегаты Func возвращают что-то; все делегаты Action возвращают void.
Func<TResult>
не принимает аргументов и возвращает TResult:
public delegate TResult Func<TResult>()
Action<T>
принимает один аргумент и не возвращает значение:
public delegate void Action<T>(T obj)
Action
- самый простой, "голой" делегат:
public delegate void Action()
Там также Func<TArg1, TResult>
и Action<TArg1, TArg2>
(и другие до четырех аргументов). Все они (кроме Action<T>
) новы для .NET 3.5 (определенные в System.Core).
... не принимает аргументов и имеет возвращаемый тип void?
Я считаю, что Action
является решением этого.
Все делегаты Func принимают по крайней мере один параметр
Это не так. Все они принимают хотя бы один аргумент типа, но этот аргумент определяет тип возврата.
Итак Func<T>
не принимает никаких параметров и возвращает значение. Используйте Action
или Action<T>
, когда вы не хотите возвращать значение.
Попробуйте System.Func<T>
и System.Action
Иногда вам нужно написать делегат для обработки событий, и в этом случае вы можете воспользоваться System.EvenHandler<T>
, который неявно принимает аргумент типа object
в дополнение ко второму параметру, который должен выводиться из EventArgs
. EventHandlers вернут void
Я лично нашел это полезным во время тестирования для создания однократного обратного вызова в теле функции.