代理和功能/动作何时不可互换
本文关键字:何时不 可互换 功能 代理 | 更新日期: 2023-09-27 18:24:00
在大多数情况下,委托和Func/Action是可互换的,但是否存在它们不可互换的情况?在能力上是否存在一些细微的差异?
(是的,SO上有很多"行动与代表",但没有一个回答能力以及它们何时不可互换的问题。)
所谓"它们不可互换的情况",我指的是不能直接将Func替换为相应的委托(并将其委托为相应的Func)的情况。
Func和Action在所有中都不可互换
-
Func
和Action
都是代表 -
Func<T,TResult>
应始终返回值 -
Action<T>
不应返回值
正如Jon Skeet在评论中回答的那样,我忽略了Action/Func实际上是委托的事实(我认为它是封装委托的类):
namespace System
{
public delegate TResult Func<in T, out TResult>(T arg);
}
因此,委托和相应的Func/Action之间没有区别,因为Func/Action是委托。