public class CollectionValueBase { public virtual T[] ToArray() { return null; } } public class CollectionBase: CollectionValueBase { } public class SequencedBase: CollectionBase { } public class ArrayBase: SequencedBase { public override T[] ToArray() { return null; } } class X { public static void Main () { } }