using System; class A { public virtual void Foo (T a, params string[] b) where T : struct { } protected virtual void Foo2 () { } public virtual T Foo4 () { return default (T); } } class B : A { public void Test (int v) { Action a = () => base.Foo (b: "n", a: v); a (); } public void Test2 (T b) where T : struct { Action a2 = () => base.Foo (b, "as", "asdfa"); } internal void Test3 () { int i = 0; Action a = delegate () { i = 1; base.Foo2 (); }; a (); a = delegate () { i = 2; base.Foo2 (); }; a (); } public T Test4 () { Func a4 = () => base.Foo4 (); return a4 (); } } class Test { public static void Main () { var b = new B (); b.Test (1); b.Test2 (2); b.Test3 (); } }