using System; public class Z : IGenericInterface { public Z Start () { return this; } Z IGenericInterface.Start () { throw new ApplicationException (); } } public interface IGenericInterface { T Start (); } public class A where T : Z, IGenericInterface { public void SomeOperation (T t) { t.Start (); } } public class C : Z, IGenericInterface { int IGenericInterface.Start () { throw new NotImplementedException (); } public static void Main () { new A ().SomeOperation (new C ()); } }