using System;
class Program {
static void Main() {
Action closure = Test();
closure();
closure();
}
static Action Test() {
Closure local = new Closure();
local.counter = 0;
return local.Function;
}
}
//gerado pelo compilador
class Closure {
public int counter;
public void Function() => Console.WriteLine(counter++);
}
//https://pt.stackoverflow.com/q/580366/101
dXNpbmcgU3lzdGVtOwoKY2xhc3MgUHJvZ3JhbSB7CiAgICBzdGF0aWMgdm9pZCBNYWluKCkgewogICAgICAgIEFjdGlvbiBjbG9zdXJlID0gVGVzdCgpOwogICAgICAgIGNsb3N1cmUoKTsKICAgICAgICBjbG9zdXJlKCk7CiAgICB9CiAgICBzdGF0aWMgQWN0aW9uIFRlc3QoKSB7CiAgICAgICAgQ2xvc3VyZSBsb2NhbCA9IG5ldyBDbG9zdXJlKCk7CiAgICAgICAgbG9jYWwuY291bnRlciA9IDA7CiAgICAgICAgcmV0dXJuIGxvY2FsLkZ1bmN0aW9uOwogICAgfQp9Ci8vZ2VyYWRvIHBlbG8gY29tcGlsYWRvcgpjbGFzcyBDbG9zdXJlIHsKICAgIHB1YmxpYyBpbnQgY291bnRlcjsKICAgIHB1YmxpYyB2b2lkIEZ1bmN0aW9uKCkgPT4gQ29uc29sZS5Xcml0ZUxpbmUoY291bnRlcisrKTsKfQoKLy9odHRwczovL3B0LnN0YWNrb3ZlcmZsb3cuY29tL3EvNTgwMzY2LzEwMQ==