using System; class Model { public int Value; } class C1 { public void Add (Func t) { } } abstract class C2 { public abstract void ApplyImpl (C1 c1) where U : TModel; } class C3 : C2 { public override void ApplyImpl (C1 c1) { c1.Add (t => t.Value); } } class Program { static void Main () { var v1 = new C1 (); var c3 = new C3 (); c3.ApplyImpl (v1); } }