To kjekke grensesnitt som alle C#-folk bør kunne er IEnumerator og IEnumerable.
Med disse kan man enkelt "loope" over innholdet i egne klasser man lager.
Eksempel på klasse hvor disse grensesnittene er støttet:
public class Garasje : IEnumerable { private string[] kjøretøy; public Garasje(int plasser) { if (plasser < 1) throw new ArgumentException("Garasjen må ha minst 1 plass!"); this.kjøretøy = new string[plasser]; } public void parker(string kjøretøy) { for (int k = 0; k < kjøretøy.Length; k++) { if (this.kjøretøy[k] == null) { this.kjøretøy[k] = kjøretøy; kjøretøy = null; break; } } if (kjøretøy != null) { throw new ArgumentOutOfRangeException("Ikke nok plass i garasjen!"); } } public void kjørUt(string kjøretøy) { for (int k = 0; k < kjøretøy.Length; k++) { if (this.kjøretøy[k] == kjøretøy) { this.kjøretøy[k] = null; kjøretøy = null; break; } } if (kjøretøy != null) { throw new ArgumentOutOfRangeException("Kjøretøyet er ikke parkert i garasjen!"); } } public IEnumerator GetEnumerator() { foreach (string k in kjøretøy) { yield return k; } } public IEnumerable ListKjøretøySortert() { string[] sorterteKjøretøy = new string[kjøretøy.Length]; Array.Copy(kjøretøy, sorterteKjøretøy, kjøretøy.Length); Array.Sort(sorterteKjøretøy); foreach (string k in sorterteKjøretøy) { yield return k; } } }
Her er det først funksjonalitet for å opprette garasjeplass, og så for å legge til og fjerne kjøretøy igjen. Enkelt, ukomplisert, kjedelig, og ikke poenget.
Poenget er de to siste metodene som utgjør den ønskede funksjonaliteten for å enkelt kunne "loope" over innholdet som her er kjøretøyene i garasjen.
For å teste at alt henger sammen:
class Program { static void Main(string[] args) { // Opprett garasje og parker biler Garasje garasje = new Garasje(2); garasje.parker("Toyota Corolla"); garasje.parker("Suzuki GSX F"); // Skriv ut liste over parkerte kjøretøy Console.WriteLine("\nKjøretøy parkert i garasjen:"); foreach (string kjøretøy in garasje) Console.WriteLine(kjøretøy); // Skriv ut liste over parkerte kjøretøy sortert Console.WriteLine("\nKjøretøy parkert i garasjen, sortert:"); foreach (string kjøretøy in garasje.ListKjøretøySortert()) Console.WriteLine(kjøretøy); // Kjører ut motorsykkelen Console.WriteLine("\nKjører ut motorsykkelen .. "); garasje.kjørUt("Suzuki GSX F"); // Skriv ut liste over parkerte kjøretøy Console.WriteLine("\nKjøretøy parkert i garasjen:"); foreach (string kjøretøy in garasje) Console.WriteLine(kjøretøy); Console.ReadLine(); } }
.. dette gir: