Nach meiner Ansicht gibt es für den Compiler, unter Verwendung der spärlichen Informationen von oben, die Möglichkeit
- "über ein Muster" oder
- über die Implementierung des Interface IEnumerable
einer Klasse zu entscheiden, ob mit der neuen For-Schleife über ein Objekt iteriert werden kann.
Lassen wir ersteres außer Acht (siehe vorheriges Posting), hat der Compiler die Möglichkeit, über die Tatsache, dass eine Klasse das Interface implementiert, im Fall von oben auch die Möglichkeit, die Tabelle aller implementierten Interfaces zu erfragen (Achtung, dies schließt dann schon dynamische Proxies aus), um eine Referenz auf die Interfacebeschreibung mitsamt Methodentabelle zu erlangen. Es ist es nicht notwendig, Referenzen zu erhöhen, um die so erlangten Referenzen auf Methoden der Art
HasNext und
GetNext zu verwenden.
Handelt es sich beim Containerausdruck selbst um ein Interface, ist der Aufruf von
_AddRef und
_Release unproblematisch.