using System; public interface IHello<T> { } public interface IFoo<T> { IHello<T> GetHello (); } public interface IBar<T> : IFoo<T> { } public class Foo<T> : IBar<T>, IFoo<T> { public Hello GetHello () { return new Hello (this); } IHello<T> IFoo<T>.GetHello () { return new Hello (this); } public class Hello : IHello<T> { public readonly Foo<T> Foo; public Hello (Foo<T> foo) { this.Foo = foo; } } } class X { public static void Main () { } }