Thursday, 13 February 2014

C# Closure

As per wiki, Closure is a first class function with free variables that are bound in the lexical environment.

First class function is function that are treated as variable. C# we have delegates.
Free variables, are ones that are accessible to function which are not either passed as argument or defined locally.
Lexical environment means scope.

We call it closure because, first class function closes the variable it refers. In the example below, though myVar goes out of scope after first inc(), it is closed by the first class function(inc). It would print 7 & 9.

static void Main(string[] args)
{
    var inc = GetAFunc();
    Console.WriteLine(inc(5));
    Console.WriteLine(inc(6));
}
 
public static Func<int,int> GetAFunc()
{
    var myVar = 1;
    Func<int, int> inc = delegate(int var1)
                            {
                                myVar = myVar + 1;
                                return var1 + myVar;
                            };
    return inc;
}
 
 

No comments: