【发布时间】:2018-01-07 16:23:09
【问题描述】:
如果我将以下代码视为 Javascript 代码,那将是有道理的……但是 Main 中的调用 action() 怎么不会为 i 产生 NullReferenceException? Action 是否抓取了 JavaScript 上下文之类的东西?提前谢谢大家。
public class Program
{
static void Main(string[] args)
{
var p = new Program();
var action = p.method();
action();
Console.ReadKey();
}
public Action method()
{
var i = 6;
Action action = () => Console.WriteLine(i);
i++;
return action;
}
}
输出>>7
【问题讨论】:
-
您要查找的词是“关闭”,而不是上下文。如果你搜索“C#闭包”,关于这个话题有相当多的信息,但本质上,
i是从method中提取到它的闭包中,这使得它在离开method的范围后仍然存在。
标签: javascript c# delegates action