// // Tests different anonymous method caching scenarios // public delegate void StringSender (string str); public delegate void VoidDelegate (); public class MainClass { public static void Main() { MainClass mc = new MainClass (); VoidDelegate del = new VoidDelegate ( delegate { StringSender ss = delegate (string s) { SimpleCallback(mc, s); }; ss("Yo!"); } ); del(); mc.Test2 (10); mc.Test3 (20); mc.Test4 (); mc.Test5 (50); } void Test2 (int a) { StringSender d = delegate (string s) { VoidDelegate d2 = delegate { s = "10"; }; }; } void Test3 (int a) { int u = 8; VoidDelegate d = delegate () { u = 9; }; VoidDelegate d2 = delegate () { }; } void Test4 () { VoidDelegate d = delegate () { VoidDelegate d2 = delegate () { int a = 9; VoidDelegate d3 = delegate () { VoidDelegate d4 = delegate () { a = 3; }; }; }; }; } int a; int b; delegate int D (int a); void Test5 (int arg) { D d2 = delegate (int i) { D d1 = delegate (int a) { return a; }; return d1 (9) + arg; }; } static void SimpleCallback (MainClass mc, string str) { System.Console.WriteLine(str); } }