匿名方法

匿名方法定义:

匿名方法是没有名称只有主体的方法。 在匿名方法中您不需要指定返回类型,它是从方法主体内的 return 语句推断的。 匿名方法是通过使用 delegate 关键字创建委托实例来声明的。

匿名方法的声明

第一种方式:

delegate (int a, int b) { return a + b; };// 有参数的声明方式
delegate(){ System.Console.Write("Hello, "); System.Console.WriteLine("World!"); });//没参数声明方式

第二种方式:可以将创建的匿名方法转换为具有任何参数列表的委托类型。这是 lambda 表达式不支持的匿名方法的唯一功能。 在所有其他情况下,lambda 表达式是编写内联代码的首选方法。

delegate { Console.WriteLine("Hello!"); };

匿名方法的使用

第一种方法使用:
Func<int, int, int> sum = delegate (int a, int b) { return a + b; };
Console.WriteLine(sum(3, 4)); // output: 7 第二种方法的使用: Action greet = delegate { Console.WriteLine("Hello!"); }; greet(); Action<int, double> introduce = delegate { Console.WriteLine("This is world!"); }; introduce(42, 2.7);

从 C# 9.0 开始,可以使用弃元指定该方法不使用的两个或更多个匿名方法输入参数:

 
Func<int, int, int> constant = delegate (int _, int _) { return 42; };
Console.WriteLine(constant(3, 4));  // output: 42

为实现向后兼容性,如果只有一个参数名为 _,则将 _ 视为匿名方法中该参数的名称。

从 C# 9.0 开始,可以在匿名方法的声明中使用 static 修饰符:

Func<int, int, int> sum = static delegate (int a, int b) { return a + b; };
Console.WriteLine(sum(10, 4));  // output: 14

静态匿名方法无法从封闭范围捕获局部变量或实例状态。

 

范围捕获局部变量或实例状态

 

上一篇:动态创建对象执行方法


下一篇:局部性原理——各类优化的基石