Duck typing en el compilador de C #

Nota Esta es no una pregunta sobre cómo implementar o emular la escritura pato en C # ...

Durante varios años tuve la impresión de que ciertas características del lenguaje C # dependían de dat una estructura definida en el lenguaje mismo (que siempre me pareció un escenario extraño de la gallina y el huevo). Por ejemplo, tenía la impresión de que el bucle foreach solo estaba disponible para su uso con tipos que implementaban IEnumerable .

Desde entonces he llegado a comprender que el compilador de C # usa el tipo pato para determinar si un objeto se puede usar en un bucle foreach, buscando un método GetEnumerator en lugar de IEnumerable . Esto tiene mucho sentido, ya que elimina el dilema del huevo y la gallina.

Estoy un poco confundido sobre por qué no parece ser el caso con el bloque que usa y IDisposable .¿Hay alguna razón en particular por la que el compilador no pueda usar la escritura pato y buscar un método Dispose ? ¿Cuál es la razón de esta inconsistencia?

Quizás haya algo más sucediendo bajo el capó con IDisposable?

Discutir por qué alguna vez tendría un objeto con un método Dispose que no implementó IDisposable es fuera del alcance de esta pregunta:)

61
задан Jeff B 5 December 2016 в 22:15
поделиться