闭包 Closure
http://en.wikipedia.org/wiki/Closure_(computer_science)
In computer science, a closure (also lexical closure or function closure) is a function or reference to a function together with a referencing environment—a table storing a reference to each of the non-local variables (also called free variables) of that function.[1] A closure—unlike a plainfunction pointer—allows a function to access those non-local variables even when invoked outside of its immediate lexical scope.
The concept of closures was developed in the 1960s and was first fully implemented in 1975 as a language feature in the Scheme programming language to support lexically scoped first-class functions. The explicit use of closures is associated with functional programming languages such asLisp and ML, as traditional imperative languages such as Algol, C and Pascal did not support returning nested functions as results of higher-order functions and thus did not require supporting closures either. Many modern garbage-collected imperative languages (such as Smalltalk, the first object-oriented language featuring closures,[2] C#, but notably not Java[3]) support closures.
Python:
def counter():
x = 0
def increment(y):
nonlocal x
x += y
print(x)
return increment
C#:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ClosureDemo
{
public delegate int DelFun ();
class Program
{
public static DelFun A(int y){
int x = y;
//DelFun d1 = delegate() { return x++; };
//return d1;
return delegate() { return x++; };
}
static void Main(string[] args)
{
DelFun f1 = A(10);
DelFun f2 = A(20);
for (int i = 0; i < 10; i++)
{
Console.WriteLine("f1:" + f1());
Console.WriteLine("f2:" + f2());
}
Console.ReadKey();
}
}
}

浙公网安备 33010602011771号