using System; using System.Collections.Generic; public class TestClass : SequencedBase, IIndexedSorted { void Test () { TestClass tt = null; tt.Foo (this); } public void Foo (IEnumerable items) { } public class Nested : ICloneable { public object Clone () { return null; } } } public abstract class SequencedBase : DirectedCollectionBase, IDirectedCollectionValue { public T2 Field; } public abstract class DirectedCollectionBase : CollectionBase, IDirectedCollectionValue { IEnumerator IEnumerable.GetEnumerator () { return null; } System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator () { return null; } } public abstract class CollectionBase : CollectionValueBase { } public abstract class CollectionValueBase : EnumerableBase, ICollectionValue { } public abstract class EnumerableBase : IEnumerable { IEnumerator IEnumerable.GetEnumerator () { return null; } System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator () { return null; } } public interface IDirectedCollectionValue : ICollectionValue, IDirectedEnumerable { } public interface ICollectionValue : IEnumerable { } public interface IIndexedSorted : ISorted, IIndexed { } public interface ISorted : ISequenced { } public interface ISequenced : IDirectedCollectionValue { } public interface IDirectedEnumerable : IEnumerable { } public interface IIndexed : ISequenced { } class C { public static void Main () { var c = new TestClass (); } }