C#学习笔记:Action与Func委托详解

需积分: 9 3 下载量 12 浏览量 更新于2024-07-20 收藏 1.25MB PDF 举报
"C#知识要点,包括Action<T>和Func<T>委托以及普通委托的使用" 在C#编程语言中,委托是一种强大的工具,它允许我们传递方法作为参数或者存储方法以便稍后执行。Action<T>和Func<T>是.NET框架中预定义的泛型委托类型,它们极大地简化了对方法的处理,尤其是在处理事件和实现回调机制时。 1. Action<T>委托: - Action<T>代表了一个没有返回值(void)的方法,接收一个或多个参数。例如,Action<int>可以用于调用一个接受int类型参数但不返回任何值的方法。Action有多个重载版本,最多可以支持16个不同的参数类型,如Action<in T1, in T2, ..., in T16>,每个T1, T2, ... 分别对应不同的参数类型。 2. Func<T>委托: - Func<T>与Action<T>类似,但其区别在于Func<T>的委托方法具有返回值。例如,Func<int, string>可以用来调用一个接受int类型参数并返回string类型值的方法。Func<T>同样有多重重载,最大可以支持16个参数加上一个返回类型,如Func<in T1, in T2, ..., in T16, out TResult>,其中TResult代表返回类型。 3. 普通委托: - 在C#中,我们可以自定义委托类型,比如上面示例中的`ConvertMethod`,来表示特定签名的方法。在示例中,`ConvertMethod`委托被用来引用`UppercaseString`方法,该方法接受一个string参数并返回一个string。通过创建委托实例,我们可以将方法绑定到委托上,并通过委托实例来调用方法,就像在`Main`方法中那样。 4. `Func<in T, out TResult>`的使用: - `Func<in T, out TResult>`是Func委托的一个具体实例,其中`in T`表示输入参数类型,`out TResult`表示返回结果类型。这使得我们可以更灵活地创建和使用委托,例如在上面的代码片段中,我们创建了一个`Func<string, string>`类型的委托实例`convertMethod`,并将其赋值为`UppercaseString`方法,这样我们就可以利用委托来调用这个转换方法。 5. 泛型委托的优势: - 泛型委托提供了更高的代码复用性,因为它们可以适应多种方法签名,而不必为每种情况创建新的委托类型。 - 它们简化了代码,减少了类型转换的需要,因为编译器可以在编译时检查类型匹配。 - 由于泛型委托是类型安全的,因此可以避免运行时错误。 理解和熟练运用Action<T>和Func<T>对于C#开发者来说至关重要,它们是构建高度灵活和可扩展的代码的基础。同时,了解如何定义和使用普通委托也是C#编程的重要部分,特别是当预定义的委托无法满足需求时。在实际开发中,这些概念常常应用于事件处理、异步操作以及函数式编程等场景。