using System; public abstract class A { public abstract A For () where MM : T; } public class B : A where V : X where X : U { readonly A _inner; public B (A inner) { _inner = inner; } public override A For () // base constraint is copied as PP : V { return _inner.For (); } } public class Test : A { public static void Main () { var t = new Test (); new B (t).For (); } public override A For () { return null; } }