interface IA : IB { } interface IB { } class A where T : IA { } class C { public virtual void Foo (A t) where T : IA { } } class D : C { public override void Foo (A t) { } public static int Main () { new D (); var m = typeof (D).GetMethod ("Foo"); var ga = m.GetGenericArguments() [0]; var tpConstraints = ga.GetGenericParameterConstraints(); if (tpConstraints.Length != 1) return 1; if (tpConstraints [0] != typeof (IA)) return 2; return 0; } }