class C { class Q { public void apply (C t) { t.bar(); } } public void foo () { Q q = new Q(); q.apply(this); } public void bar () { System.Console.WriteLine ("'{0} {1} {2} {3}'", typeof(X),typeof(Y),typeof(A),typeof(B)); } } class X { public static void Main () { C c = new C(); c.foo (); } }