0当然代表第0个位置上的参数,但究竟是哪个呢? 答案是:instance方法的话第0个参数实际上是自己(this),static的方法则第0个参数就是真正看到的第一个参数。或者这么记,不管instance还是static,第0个参数永远是调用者传递的第一个参数(感觉有点怪)
http://en.m.wikipedia.org/wiki/Closure_(computer_science)
这就是上面说的闭包的概念。
C#语言里还有一个类型涉及到闭包,可以顺便记忆:
就是delegate, 作为继承自delegate类的引用类型,delegate实际有两种
http://blog.slaks.net/2011/06/open-delegates-vs-closed-delegates.html
但默认的使用delegate都是closed delegate, 你必须用create delegate方法来创建一个open delegate.
Lambda表达式是编译器帮助程序员自动生成delegate的语法(有时也生成表达式expression), 在生成delegate时,同样默认是生成为closed delegate.
这就带来了一个潜在的问题:
Lambda用爽了,很容易出现delegate中的引用问题(你自己都没注意编译器就又帮你生成了一个delegate),他们可都是closed的。下面的贴子是问题的根本,出问题的时候是我们出现了delegate中的delegate,
在没有把下一层的delegate(onsuccess, onfail)置空值释放掉的情况下,又保持着当前方法的delegate一直在内存里。
http://stackoverflow.com/questions/8417470/private-field-captured-in-anonymous-delegate