using System.Collections.Generic; namespace Test { public abstract class Base { public virtual IEnumerable GetStuff (int a) { yield return this; } } public abstract class Derived : Base { public override IEnumerable GetStuff (int a) { foreach (var x in base.GetStuff (a)) yield return x; } } public class SpecialDerived : Derived { public override IEnumerable GetStuff (int a) { foreach (var x in base.GetStuff (a)) yield return x; } public static void Main () { Base b = new SpecialDerived (); foreach (var a in b.GetStuff (5)) { } } } }