abstract class Sequence : INext
protected int currentValue;
public Sequence(int startValue, int step)
this.currentValue = startValue;
public abstract int Next();
class ArithmeticSequence : Sequence
public ArithmeticSequence(int startValue, int step)
: base(startValue, step) { }
public override int Next()
int nextValue = currentValue + step;
currentValue = nextValue;
class GeometricSequence : Sequence
public GeometricSequence(int startValue, int step)
: base(startValue, step) { }
public override int Next()
int nextValue = currentValue * step;
currentValue = nextValue;
class FibonacciSequence : Sequence
private int previousValue;
public FibonacciSequence(int startValue) : base(startValue, 0)
this.previousValue = startValue;
public override int Next()
int nextValue = currentValue + previousValue;
previousValue = currentValue;
currentValue = nextValue;
Show(new ArithmeticSequence(2, 3));
Show(new ArithmeticSequence(5, 2));
Show(new GeometricSequence(2, 2));
Show(new GeometricSequence(3, 3));
Show(new FibonacciSequence(1));
static void Show(INext sequence)
for (int i = 0; i < 10; i++)
Console.Write(sequence.Next() + " ");