C# 中 lambda 表达式和委托的区别

2024 年 8 月 29 日 | 5 分钟阅读

在本文中,您将学习 C# 中 lambda 表达式委托 之间的区别。但在讨论它们的区别之前,您必须了解 lambda 表达式和委托的语法和示例。

什么是委托?

在 C# 中,引用类型表示具有特定签名的**方法的引用**,称为**委托**。它允许间接调用方法,本质上充当函数引用。

委托 允许将方法存储在数据结构中、从方法中返回以及作为参数传递。

语法

它具有以下语法:

参数

  • return_type:它表示委托方法返回的类型。它指定方法在执行后将返回的数据类型。如果方法不返回任何内容,则使用 void。
  • DelegateName:用于引用已定义委托类型的名称。它用于实例化委托实例。
  • parameter_list:此处定义了委托引用的方法将接收的参数列表。如果参数不止一个,则参数用逗号分隔,并包含类型和名称。

示例

让我们用一个例子来说明 C# 中的**委托**。

输出

The result of the Addition of two numbers: 30
The result of the Subtraction of two numbers: -10

说明

此 C# 代码中的一个名为 MathOperationsDelegate 的委托表示接受两个 double 参数并返回 double 结果的方法。Demo 类声明了两个静态方法 **Addition** 和 **Subtraction**,分别执行加法和减法运算。在 Main 方法中创建的委托实例被分配给 Addition 和 Subtraction。然后,在调用这些委托实例并传入参数 10 和 20 后,调用关联的方法。最后,控制台显示加法和减法运算的结果。此代码演示了如何使用委托通过提供方法调用的间接级别来允许方法调用的动态行为。

什么是 Lambda 表达式?

在 C# 中,lambda 表达式 为编写匿名函数或方法提供了一种简洁的语法。它们是定义可以分配给变量或作为参数传递给方法的表达式或委托的快捷方式。

语法

它具有以下语法:

Parameters:参数用括号 () 表示。对于 lambda 表达式,它们代表输入参数。如果没有参数,则需要使用空括号 ()。

Lambda Operator (=>): Lambda 运算符,有时也称为**“go to”**运算符,将 lambda 表达式的主体与其参数分开。它由等号**‘=’**和大于号**‘>’**组成。

Expression:在 lambda 运算符之后,可以使用用**大括号 {}**括起来的任何表达式。

  • 如果 lambda 表达式只包含一个表达式,则该表达式可以直接跟在 lambda 运算符之后。
  • 大括号 {} 用于包含 lambda 表达式所需的任何语句。

示例

让我们用一个例子来说明 C# 中的**Lambda 表达式**。

输出

The square of 10 is: 100
The sum of the 26 and 18 is: 44
Lambda Expression!
The sign of -15 is: Non-positive.
The result of (14 * 18) + 19 is: 271

说明

这些 lambda 表达式以简洁明了的方式定义了内联函数,提高了 C# 代码的可读性和可维护性。它们演示了 lambda 表达式如何灵活地用于处理不同的情况和操作类型。

C# 中 lambda 表达式和委托的区别

在 C# 编程中,lambda 表达式和委托都是必不可少的。虽然委托提供了封装方法引用、回调机制和事件驱动编程的机制,但 lambda 表达式提供了更清晰、更具表现力的内联函数定义方式。

特性Lambda 表达式Delegate
定义使用 => 运算符定义匿名内联函数。表示具有特定签名的**方法引用的类型**。
参数它可以捕获外部作用域的变量(闭包)。委托声明包含参数的特定定义。
类型推断编译器根据使用它们的上下文自动推断。必须显式定义委托类型。
调用通常用于创建委托对象,而无需显式定义方法。需要将方法引用传递给委托并创建实例。
可用性LINQ 查询、函数式编程模式和事件处理是常见用途。事件驱动编程和定义回调机制的基本构建块。