委托
委托是一种引用类型,表示对具体特定参数列表和返回类型的方法的引用,用于将方法作为参数传递给其他方法。
- 委托类似于 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 运算符和对象初始值设定项创建匿名类型。
可结合使用 new 运算符和对象初始值设定项创建匿名类型。
匿名类型包含一个或多个公共只读属性。 包含其他种类的类成员(如方法或事件)为无效。 用来初始化属性的表达式不能为 null、匿名函数或指针类型。
实例:
var v = new { Amount = 108, Message = "Hello" }; //将鼠标指针停留在v.Amount和v.Message上来验证它们的推断类型是int和string。 Console.WriteLine(v.Amount + v.Message);