C#练习题——匿名方法与闭包实战:函数式编程的优雅实现
一、任务:写一个函数传入一个整数,返回一个函数
(1)之后执行这个匿名函数时传入一个整数和之前那个函数传入的数相乘
(2)返回(1)的结果
二、核心代码解析
1. 工厂方法 - DealWith
public static Action<int> DealWith(int num)
{return delegate (int num2) {Console.WriteLine("{0}和{1}相乘的结果为{2}", num, num2, num * num2);};
}
返回一个
Action<int>
委托类型使用匿名方法
delegate (int num2)
创建委托实例闭包机制:匿名方法捕获了外部参数
num
2. 使用方式
Action<int> action = DealWith(3); // 创建固定乘数为3的乘法器
action(5); // 计算 3 × 5 = 15
三、闭包机制深度解析
1.闭包的本质
// num 被匿名方法"捕获" - 这就是闭包
delegate (int num2) {Console.WriteLine("{0}和{1}相乘的结果为{2}", num, num2, num * num2);// ↑ 这里的num来自外部作用域,被自动"记住"了
};
2.闭包的生命周期
调用DealWith(3)时,参数
num=3
进入作用域匿名方法捕获这个
num
值即使DealWith方法执行完毕,
num=3
仍然被匿名方法持有action委托长期保持对
num=3
的引用
四、完整代码
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Threading;
using System.Threading.Tasks;
using System.Xml.Linq;namespace 进阶测试
{class Program{public static Action<int> DealWith(int num){return delegate (int num2) {Console.WriteLine("{0}和{1}相乘的结果为{2}", num, num2,num * num2);};}static void Main(string[] args){Action<int> action = DealWith(3);action(5);}}
}