代理和功能/动作何时不可互换

本文关键字:何时不 可互换 功能 代理 | 更新日期: 2023-09-27 18:24:00

在大多数情况下,委托和Func/Action是可互换的,但是否存在它们不可互换的情况?在能力上是否存在一些细微的差异?

(是的,SO上有很多"行动与代表",但没有一个回答能力以及它们何时不可互换的问题。)

所谓"它们不可互换的情况",我指的是不能直接将Func替换为相应的委托(并将其委托为相应的Func)的情况。

代理和功能/动作何时不可互换

Func和Action在所有中都不可互换

  1. FuncAction都是代表

  2. Func<T,TResult>应始终返回值

  3. Action<T>不应返回值

正如Jon Skeet在评论中回答的那样,我忽略了Action/Func实际上是委托的事实(我认为它是封装委托的类):

namespace System
{
    public delegate TResult Func<in T, out TResult>(T arg);
}

因此,委托和相应的Func/Action之间没有区别,因为Func/Action是委托。