Unterprogramme als Resultate

static int x = 3;	
static Func<int,int> s (int y) {
    return z => x + y + z;     
}
static void Main () {
    Func<int,int> p = s(4);
    Console.WriteLine (p(3));  
}

Wenn die von s(4) konstruierte Funktion p aufgerufen wird, dann wird der s-Frame benötigt, steht aber nicht mehr im Stack.

Die (Frames in den) Closures müssen im Heap verwaltet werden.



Johannes Waldmann 2011-01-18