Absolument rien, mais il le fait d'une manière très inefficace.
L'ordre des opérations est la suivante:
- instancier une nouvelle liste, avec zéro articles
- itérer sur cette liste nouvellement instancié, qui a zéro éléments
- pas jeté l'objet de base à un dérivé objet, car la liste a zéro élément. Si la liste contient des éléments, cette étape entraîne une exception d'exécution.
- N'exécutez pas le code dans le bloc foreach, car la liste contient zéro élément.
Modifier
En fonction de votre édition, vous courez le risque d'un InvalidCastException
doit tout élément de la liste transmise à Foo
pas réellement être un objet Derived
.
Éditer2
Pourquoi compile-t-il? Parce que foreach
implique une distribution implicite à Object
pour chaque élément dans la liste, puis une autre transtypage explicite du type spécifié dans le bloc foreach
, dans ce cas Derived
Lisez sur le polymorphisme, voici un endroit pour commencer: http://en.wikipedia.org/wiki/Polymorphism_in_object-oriented_programming – Donnie
Je sais ce qu'est le polymorphisme. –