En C #, comencé a ver aparecer todos estos métodos mágicos, sin una copia de seguridad de una interfaz. ¿Por qué fue elegido esto?
Dejame explicar.
Anteriormente en C #, si un objeto implementaba la IEnumerableinterfaz, sería iterable automáticamente por un foreachbucle. Eso tiene sentido para mí, ya que está respaldado por una interfaz, y si tuviera que repetir mi propia Iteratorfunción dentro de la clase, podría hacerlo sin preocuparme de que mágicamente significara otra cosa.
Ahora, aparentemente, (no estoy seguro de cuándo), estas interfaces ya no son necesarias. Solo necesita tener las conversiones de nombres correctas.
Otro ejemplo es hacer que cualquier objeto sea aceptable al tener un método llamado exactamente GetAwaiter que tiene algunas propiedades específicas.
¿Por qué no hacer una interfaz como lo hicieron con ellos IEnumerableo INotifyPropertyChangedpara respaldar esta "magia" estáticamente?
Más detalles sobre lo que quiero decir aquí:
http://blog.nem.ec/2014/01/01/magic-methods-c-sharp/
¿Cuáles son los pros y los contras de los métodos mágicos? ¿Existe algún sitio en línea donde pueda encontrar algo sobre por qué se tomaron estas decisiones?
async/ await, eso solo funcionará con el código que se escribió después de que .NET 4.5 se extendió lo suficiente como para ser un objetivo viable ... que es básicamente ahora. Pero una traducción puramente sintáctica en llamadas a métodos me permite agregar awaitfuncionalidad a los tipos existentes después del hecho.
foreachbucle al principio. Hay que nunca ha sido un requisito para el objeto de implementar IEnumerablepara foreachel trabajo. Ha sido una convención hacerlo.