using System; public interface ICacheable {} public class Foo where T : U, new() where U : ICacheable, new() { public object Test () { return new Bar (); } } public class Bar where T : ICacheable {} public class Test : ICacheable {} public class Program { static void Main() { var x = new Foo (); x.Test (); } }