interface I<T> { } interface IB<T> : I<string> { } struct S { class P { } public class C : IB<P> { } } class M { static void Test<T> (I<T> iface) { } static void Test<T> (IB<T> iface) { } static void Main () { Test (new S.C ()); } }