using System; public interface IFoo { IFoo Hello (); } public interface IFoo : IFoo { new IFoo Hello (); } public interface ICollectionValue: IFoo { } public interface ICollection: ICollectionValue { } public abstract class EnumerableBase : IFoo { public abstract IFoo Hello(); IFoo IFoo.Hello () { return Hello (); } } public abstract class CollectionBase : EnumerableBase { } public class HashBag: CollectionBase, ICollection { public override IFoo Hello () { return this; } } class X { public static void Main () { } }