c#闭包研究(1)
来源:互联网 发布:定时语音播报软件 编辑:程序博客网 时间:2024/06/05 20:34
本人新手,最近想学习闭包,然后看到这样一篇文章
(http://www.cnblogs.com/happyframework/p/3421754.html?utm_source=tuicool)
private static void Before() { Action[] actions = new Action[10]; for (var i = 0; i < actions.Length; i++) { actions[i] = () => { Console.WriteLine(i); }; } foreach (var item in actions) { item(); } }
然后他的输出 好奇怪
文章中这样提示的
private static void After() { Action[] actions = new Action[10]; var anonymous = new AnonymousClass(); for (anonymous.i = 0; anonymous.i < actions.Length; anonymous.i++) { actions[anonymous.i ] = anonymous.Action; } foreach (var item in actions) { item(); } } class AnonymousClass { public int i; public void Action() { Console.WriteLine(this.i); } }
终于明白了
首先,action会创建一个长度为10的数组。
然后微软编译器就会帮我们创建一个匿名类AnonymousClass(名字我猜的,还不懂)里面声明 i 变量,以及输出语句。
然后初始化这个类
for循环里。指定 i 的值,每赋值一个action[ i ] 时,调用AnonymousClass的action方法,这个方法又指向 i 。
所以 就对导致 i = 1,action[ 0 ] = 1 action[ 1 ] = 1
而且 这个过程会等action数组初始化完成的时候才会全部输出,就会出现这种后果。
这个神句真的好神奇,应该是我了解太浅了,先记录下来。
阅读全文
0 0
- c#闭包研究(1)
- 研究闭包实例
- JavaScript闭包研究
- js闭包的研究
- c# Attribute(特性) 研究
- 关于C#闭包
- C#和闭包
- C#与闭包
- 浅谈C#闭包
- C#闭包问题
- C#与闭包
- C#与闭包
- C#闭包了解
- C# 闭包
- c#闭包!!
- C#与闭包
- C# 闭包对象
- C#与闭包
- C#修改文件或文件夹的权限,为指定用户、用户组添加完全控制权限
- java 开发面试指南(持续更新)
- poj1837(dp)
- Linux 上创建或扩展交换分区的方法!
- 【MOOC】【枚举】a.特殊密码锁——位运算
- c#闭包研究(1)
- centos7下安装MYSQL(mariadb)
- jsp taglib
- 区间DP入门-poj 1651
- SpringMVC的返回值
- android 开发菜鸟开篇布局
- selinux
- quartz定时任务使用MYSQL数据库,报SCHED_TIME没有默认值
- jquery选择器是什么?