using System; public class Control {} public class UserControl : Control {} namespace test { public class MainPage : UserControl { public static void Main () { var more = new MoreConstrained(); more.test(new MainPage ()); } } public class MoreConstrained where T : Control { public void test(T param) { Console.WriteLine("More " + typeof(T) + " " + param); var x = new LessConstrained(); x.test(); } } public class LessConstrained where T : class { public void test() { Console.WriteLine("Less " + typeof(T2)); } } }