委托

委托是一种引用类型,表示对具体特定参数列表返回类型的方法的引用,用于将方法作为参数传递给其他方法。
  • 委托类似于 C++ 函数指针,但委托完全面向对象,不像 C++ 指针会记住函数,委托会同时封装对象实例和方法。-
  • 委托允许将方法作为参数进行传递。
  • 委托可用于定义回调方法。
  • 委托可以链接在一起;例如,可以对一个事件调用多个方法。
  • 方法不必与委托类型完全匹配。 委托中的变体:使用委托中的变体 (C#) | Microsoft Learn
  • 使用 Lambda 表达式可以更简练地编写内联代码块。

匿名函数

可以使用Lambda表达式来创建匿名函数;任何 Lambda 表达式都可以转换为委托类型。 
匿名函数的实例样式
x => x + 1                  // 隐式类型,表达式
x => { return x + 1; }           // 隐式类型,语句
(int x) => x + 1               // 显示类型,表达式
(int x) => { return x + 1; }       // 显式类型,语句体
(x, y) => x * y               // 多参数
() => Console.WriteLine()            // 没有参数
async (t1,t2) => await t1 + await t2    // 异步
delegate (int x) { return x + 1; }    // 匿名方法表达式
delegate { return 1 + 1; }         // 匿名方法表达式 忽略参数

匿名类型

匿名类型提供了一种方便的方法,可用来将一组只读属性封装到单个对象中,而无需首先显式定义一个类型。每个属性的类型由编译器推断。
可结合使用 new 运算符和对象初始值设定项创建匿名类型。
匿名类型包含一个或多个公共只读属性。 包含其他种类的类成员(如方法或事件)为无效。 用来初始化属性的表达式不能为 null、匿名函数或指针类型。

实例:
var v = new { Amount = 108, Message = "Hello" };

//将鼠标指针停留在v.Amount和v.Message上来验证它们的推断类型是int和string。
Console.WriteLine(v.Amount + v.Message);