using System; struct S { } abstract class B1 { public abstract void Test (U x) where U : struct, T1, T2; } abstract class B2 { public abstract void Test (U x) where U : class, T1, T2; } class C1 : B1 { public override void Test (U x) { } } class C2 : B2 { public override void Test (U x) { } } class Test { public static int Main () { var m = typeof (C1).GetMethod ("Test"); var ta = m.GetGenericArguments ()[0].GetGenericParameterConstraints (); if (ta.Length != 2) return 1; m = typeof (C2).GetMethod ("Test"); ta = m.GetGenericArguments ()[0].GetGenericParameterConstraints (); if (ta.Length != 1) return 2; Console.WriteLine ("ok"); return 0; } }