public class TestClass<T> where T : class { public bool Check (T x, T y) { return x == y; } } public class C { } public class TestClass2<T> where T : C { public bool Check (T x, T y) { return x == y; } } public class X { public static int Main () { new TestClass<object> ().Check (null, null); new TestClass2<C> ().Check (null, null); return 0; } }