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:
