Your third guess is correct. The compiler will generate code like this:
private class Locals
{
public int count;
public void Anonymous()
{
this.count++;
}
}
public Action Counter()
{
Locals locals = new Locals();
locals.count = 0;
Action counter = new Action(locals.Anonymous);
return counter;
}
Make sense?
Also, you asked for comparisons. VB and JScript both create closures in pretty much the same way.