Remarque C'est pas une question sur la façon de mettre en œuvre ou à imiter duck-typing en C#...
Pendant plusieurs années j'ai eu l'impression que certaines fonctionnalités de langage C# ont été depdendent sur les structures de données définies dans la langue elle-même (qui m'a toujours semblé étrange de poulet et de l'oeuf scénario pour moi). Par exemple, j'étais sous l'impression que l' foreach
boucle était seulement disponible pour une utilisation avec des types qui ont mis en œuvre IEnumerable
.
Depuis lors, j'ai fini par comprendre que le compilateur C# utilise le duck-typing pour déterminer si un objet peut être utilisé dans une boucle foreach, la recherche d'un GetEnumerator
méthode plutôt que d' IEnumerable
. Cela fait beaucoup de sens, car il élimine la poule et de l'oeuf casse-tête.
Je suis un peu confus quant à pourquoi ce n'est pas ne semble pas être le cas avec l' using
bloc et IDisposable
. Existet-il une raison pour que le compilateur ne peut pas utiliser le duck-typing & pour un look Dispose
méthode? Quelle est la raison de cette incohérence?
Peut-être il y a quelque chose d'autre gong sur sous le capot avec IDisposable?
Discuter de pourquoi vous voulez toujours avoir un objet avec une méthode dispose que de ne pas mettre en œuvre IDisposable est en dehors de la portée de cette question :)