Lorsque j'implémente IList<T>
, je trouve que je dois définir deux méthodesGetEnumerator
. L'un renvoie une valeur de type IEnumerator
, tandis que l'autre renvoie IEnumerator<T>
.Pourquoi l'implémentation de 'IList <T>' nécessite-t-elle la définition de deux méthodes 'GetEnumerator'?
Je suis un peu confus au sujet de la différence entre ces deux méthodes GetEnumerator
. Alors que les types de retour sont évidemment différents, ne contiennent-ils pas essentiellement les mêmes données?
En outre, pourquoi les deux versions de GetEnumerator
peuvent-elles exister en tant que méthodes lorsqu'elles ne diffèrent que par le type de retour? Cela semble violer la règle en C# qui spécifie que les méthodes surchargées ne peuvent pas différer uniquement par type de retour.
Pas tout à fait vrai, l'argument générique n'est pas suffisant - l'un est implémenté explicitement, l'autre ne l'est pas. –
J'appellerais à peine l'utilisation non générique de IEnumerator dans une magie de boucle foreach. Il tente simplement une conversion de l'objet au type que vous spécifiez. Si cela échoue, vous obtiendrez une exception. –
Accepté pour expliquer le problème de compatibilité descendante. Merci. – MyNameIsJob