您的位置:首页 > 编程语言 > C#

深入理解 c# 第五章 使用多个委托来捕获多个变量实例

2018-04-11 17:13 716 查看
class MultipleCaptures
{
static void Main()
{
List<MethodInvoker> list = new List<MethodInvoker>();

for (int index = 0; index < 5; index++) // index 0 1 2 3 4 5
{
int counter = index * 10; //开始是0  10 20 30 40   实例化counter 每次循环都会重新实例化
list.Add(delegate   //每次循环创建一个委托
{
Console.WriteLine(counter); //打印并递增捕获的变量
counter++;  // 1  2 3 4 5  委托创建的不会被实例化
});
}

foreach (MethodInvoker t in list)
{
t(); //调用委托实例  但counter又重新创建了,等于0  输出0 10 20 30 40  输出的都是重新实例化的counter
}

list[0]();  //输出counter=1  这是第一个委托,counter=2,下次调用时保留counter=2
list[0]();  //又调用匿名方法, counter=2  下次调用时 counter=3
list[0]();  // counter =3  委托执行3次

list[1](); // counter = 11 ,第二个委托多执行1次, 输出的是第二个委托执行完的counter=11
}
}


复杂,慢慢来,就是委托捕获的变量不会被清理。

输出
0
10
20
30
40
1
2
3
11
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c#