using System;
public class Test
{
delegate void Foo();
class Bar {
public int X;
public void DoIt() {
X++;
Console.WriteLine("X={0}", X);
}
}
public static void Main() {
Bar b = new Bar();
var foo = MakeFooFromBar(b);
foo();
foo();
foo();
Console.WriteLine("X={0}", b.X);
}
private static Foo MakeFooFromBar(Bar b) {
return new Foo(b.DoIt);
}
}
dXNpbmcgU3lzdGVtOwoKcHVibGljIGNsYXNzIFRlc3QKewoJCglkZWxlZ2F0ZSB2b2lkIEZvbygpOwoJCgljbGFzcyBCYXIgewoJCXB1YmxpYyBpbnQgWDsKCQlwdWJsaWMgdm9pZCBEb0l0KCkgewoJCQlYKys7CgkJCUNvbnNvbGUuV3JpdGVMaW5lKCJYPXswfSIsIFgpOwoJCX0KCX0KCXB1YmxpYyBzdGF0aWMgdm9pZCBNYWluKCkgewoJCUJhciBiID0gbmV3IEJhcigpOwoJCXZhciBmb28gPSBNYWtlRm9vRnJvbUJhcihiKTsKCQlmb28oKTsKCQlmb28oKTsKCQlmb28oKTsKCQlDb25zb2xlLldyaXRlTGluZSgiWD17MH0iLCBiLlgpOwoJfQoJCglwcml2YXRlIHN0YXRpYyBGb28gTWFrZUZvb0Zyb21CYXIoQmFyIGIpIHsKCSAgICByZXR1cm4gbmV3IEZvbyhiLkRvSXQpOwoJfQp9