C# für Ein- und Umsteiger

Iteration mit foreach

Ein weiteres neues Element ist das Schlüsselwort foreach, mit dem man über alle Objekte einer Sammlung iterieren kann. Mit jedem Iterationsschritt erhält man dann das nächste Objekt aus der Sammlung. Im Beispiel der Konsolenapplikation wird über ein Array iteriert, darauf ist man aber nicht beschränkt. Tatsächlich ist es so, dass man mit foreach über jedes Objekt iterieren kann - vorausgesetzt, dieses Objekt implementiert die Schnittstelle IEnumerable, die in der .NET-Bibliothek definiert ist.

Schnittstellen funktionieren in C# dabei so ähnlich wie in COM. Sie beschreiben einen Satz an Methoden oder Eigenschaften, enthalten aber keinen Code. Zur Laufzeit eines Programms lässt sich überprüfen, ob ein gegebenes Objekt eine bestimmte Schnittstelle unterstützt oder nicht. Ist das der Fall, lassen sich dessen Methoden einfach verwenden. Jede Schnittstelle kann dabei von beliebig vielen Objekten unterstützt werden - wie dann die konkrete Implementierung der Schnittstelle aussieht, ist dem Objekt selbst beziehungsweise dessen Programmierer überlassen. Eine Schnittstelle beschreibt lediglich abstrakt einen bestimmten Satz an Funktionalität und macht ihn bekannt, so dass unterschiedliche Komponenten unterschiedlicher Programmierer auf eine gemeinsam bekannte Funktionalität zurückgreifen können.

Mit anderen Worten: Praktisch jeder eigene Typ kann mit der Unterstützung für foreach ausgestattet werden. Das hat einige praktische Implikationen: Immer wenn man einen Typ definiert, der in irgendeiner Weise als Container für andere Objekte fungiert, kann man diesen mit Unterstützung für foreach ausstatten. Hält man sich daran, schafft das eine sehr homogene Schreibweise bei der Verwendung eigener Typen.

C/++-Programmierern wird an dieser Stelle auch noch die Art und Weise auffallen, wie das Array mit den Argumenten definiert wird: In C# stehen die eckigen Klammern nicht hinter dem Namen der Variable, sondern hinter dem Typ: Es heißt also nicht string args[], sondern string[] args.