using System; public class ThisBaseClass where A: ThisBaseClass where B: ThatBaseClass, new() where C: class { } public class ThatBaseClass where B: ThatBaseClass, new() where A: ThisBaseClass where C: class { } public class ThisClass: ThisBaseClass where A: ThisClass where B: ThatClass, new() where C: class { } public class ThatClass: ThatBaseClass where B: ThatClass, new() where A: ThisClass where C: class { } public class ThisClass: ThisClass { } public class ThatClass: ThatClass { } public class Test { public static void Main () { } }