闭包
闭包 = 方法跑完了,里面的变量却没有消失,还能继续用。
就像:你去饭店吃饭,吃完走了,但桌子没被收走,下次回来还能继续用。
闭包的作用只有 2 个:
1方法跑完,变量不销毁。
Action 计数器()
{
int num = 0; // 这个变量不会消失!
// 返回一个匿名方法
return () =>
{
num++;
Console.WriteLine(num);
};
}
var run = 计数器();
run(); // 1
run(); // 2
run(); // 3
2让外面的代码,能安全访问方法内部的变量而且不会被别人乱改。
内部方法可以访问外部变量
外部方法结束后,变量依然存活
变量不会被外界随便修改,非常安全
using System;
class Program
{
static void Main()
{
Action run = Test();
run(); // 1
run(); // 2
run(); // 3
}
static Action Test()
{
int num = 0; // 闭包变量:方法结束也不消失
return () => Console.WriteLine(++num);
}
}
Test () 已经执行完了,但里面的 num 没有死,还能被匿名方法继续用。
闭包判断三要素(必须同时满足)
只要同时满足下面 3 条,100% 是闭包!
- 里面有一个 匿名方法 / Lambda
(就是没有名字的方法,像:() => { }) - 这个匿名方法 用了外面的变量
(不是自己定义的,是外面方法里的变量) - 外面的方法 已经结束了,但匿名方法还能继续用那个变量

浙公网安备 33010602011771号