using System; using System.Collections.Generic; public class SequentialMusicElement: MusicElement{ private List elements; public SequentialMusicElement(MusicElement[] elements){ this.elements = new List(elements); } // Factory method: public static MusicElement MakeSequentialMusicElement(params MusicElement[] elements){ return new SequentialMusicElement(elements); } public override TimedNote[] Linearize(int startTime){ int time = startTime; List result = new List(); foreach(MusicElement me in elements){ result.AddRange(me.Linearize(time)); time = time + me.Duration; } return result.ToArray(); } public override int Duration{ get{ int result = 0; foreach(MusicElement me in elements){ result += me.Duration; } return result; } } public override MusicElement Transpose(int levels){ List transposedElements = new List(); foreach(MusicElement me in elements) transposedElements.Add(me.Transpose(levels)); return new SequentialMusicElement(transposedElements.ToArray()); } }