En C #, j'ai commencé à voir toutes ces méthodes magiques surgir, sans être sauvegardées par une interface. Pourquoi a-t-il été choisi?
Laissez-moi expliquer.
Auparavant en C #, si un objet implémentait l' IEnumerable
interface, il serait automatiquement itérable par une foreach
boucle. Cela a du sens pour moi, car il est soutenu par une interface, et si je devais avoir ma propre Iterator
fonction dans la classe en cours d'itération, je pourrais le faire sans craindre que cela signifierait par magie autre chose.
Maintenant, apparemment, (je ne sais pas quand), ces interfaces ne sont plus nécessaires. Il a juste besoin d'avoir les bonnes conversions de noms.
Un autre exemple est de rendre n'importe quel objet attendable en ayant une méthode nommée exactement GetAwaiter
qui a quelques propriétés spécifiques.
Pourquoi ne pas créer une interface comme ils l'ont fait avec IEnumerable
ou INotifyPropertyChanged
sauvegarder cette "magie" statiquement?
Plus de détails sur ce que je veux dire ici:
http://blog.nem.ec/2014/01/01/magic-methods-c-sharp/
Quels sont les avantages et les inconvénients des méthodes magiques, et y a-t-il un endroit en ligne où je peux trouver des informations sur les raisons pour lesquelles ces décisions ont été prises?
async
/ await
, cela ne fonctionnera qu'avec le code qui a été écrit après que .NET 4.5 est devenu suffisamment répandu pour être une cible viable ... ce qui est fondamentalement maintenant. Mais une traduction purement syntaxique en appels de méthode me permet d'ajouter des await
fonctionnalités aux types existants après coup.
foreach
boucle au début. Il n'a jamais été nécessaire que l'objet à implémenter IEnumerable
pour foreach
fonctionner. C'est juste une convention de le faire.