static int d ( Func<int,int> g ) { return g(g(1)); } static int p (int x) { Func<int,int> f = y => x + y; return d (f); }
Betrachte Aufruf p(3).
Das innere Unterprogramm f muß auf den p-Frame zugreifen, um den richtigen Wert des x zu finden.
Dazu Closure konstruieren: f mit statischem Vorgänger.
Wenn Unterprogramme als Argumente übergeben werden, steht der statische Vorgänger im Stack.
(ansonsten muß man den Vorgänger-Frame auf andere Weise retten, siehe später)