深入理解 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# 第五章 捕获不同作用域的变量 警告:前面的代码糟糕
- 深入理解 c# 第五章 使用匿名方法来简单整理文件
- 深入理解 c# 第五章 不同种类的变量和匿名方法的关系
- 深入理解 c# 第五章 匿名方法用于Action<T>委托类型 反转字符 求平方根 求平均数
- 深入理解 c# 第五章 从匿名方法内外访问一个变量
- 深入理解 c# 第一章 使用IComparer<Product>委托 对 List <Product> 进行排序
- 深入理解 c# 第五章 捕捉变量的生命周期延长的例子
- 深入理解 c# 第五章 使用了忽略参数的匿名方法来订阅事件
- 深入理解 c# 第五章 演示方法组转换和委托逆变性
- 深入理解 c# 第五章 演示委托类的返回类型的协变性
- 深入理解C#委托及原理
- 深入理解C#编程中的组件-事件-委托
- C#3.0委托之委托变量的使用实例
- C# 事件的设计与使用深入理解
- 交换两个数不使用第三方变量=!!=深入理解按位异或运算符
- 对Java方法内部使用this访问成员变量的深入理解
- C# 事件的设计与使用深入理解
- 深入理解C#委托及原理
- ch01.深入理解C#委托及原理_《没有控件的ASPDONET》
- 深入理解C#委托及原理