class Program
{
static Action act = null;
static void Main(string[] args)
{
Test();
act();
act();
Test();
act();
}
static void Test()
{
int count = 0;
if(act == null) act = () => Console.Write(++count + " ");
}
}
Run Code Online (Sandbox Code Playgroud)
结果:1 2 3
为什么?
如果delete
[ if(act == null)
]
结果:1 2 1
Jon*_*eet 10
当前,您仅创建一个委托实例。这将捕获在Test
第一次调用该方法时声明的局部变量。
由于捕获了该局部变量,该局部变量有效地延长了生存期。每次调用委托时,它都会增加相同的变量。
删除if (act == null)
条件后,每次调用都会创建一个新的委托Test
,这意味着它将捕获一个不同的count
局部变量,每次均从0开始。您调用了Test()
两次,并且通过第一个调用创建的委托被调用了两次(输出为1,然后为2)。通过第二个调用创建的委托仅被调用一次(输出1)。