In C #, ho iniziato a vedere spuntare tutti questi metodi magici, senza essere supportato da un'interfaccia. Perché è stato scelto?
Lasciatemi spiegare.
Precedentemente in C #, se un oggetto implementava l' IEnumerableinterfaccia, sarebbe automaticamente iterabile da un foreachciclo. Questo ha senso per me, dato che è supportato da un'interfaccia e se dovessi avere la mia Iteratorfunzione all'interno della classe in fase di iterazione, potrei farlo senza preoccuparmi che significherebbe magicamente qualcos'altro.
Ora, a quanto pare, (non sono sicuro di quando), queste interfacce non sono più necessarie. Deve solo avere le giuste conversioni di denominazione.
Un altro esempio è rendere qualsiasi oggetto attendibile avendo un metodo chiamato esattamente GetAwaiter che ha alcune proprietà specifiche.
Perché non creare un'interfaccia come hanno fatto con IEnumerableo INotifyPropertyChangedper sostenere questa "magia" staticamente?
Maggiori dettagli su cosa intendo qui:
http://blog.nem.ec/2014/01/01/magic-methods-c-sharp/
Quali sono i pro e i contro dei metodi magici, e c'è un posto online dove posso trovare qualcosa sul perché queste decisioni sono state prese?
async/ await, funzionerà solo con il codice che è stato scritto dopo che .NET 4.5 è diventato abbastanza diffuso da essere un obiettivo praticabile ... che è praticamente adesso. Ma una traduzione puramente sintattica in chiamate di metodo mi consente di aggiungere awaitfunzionalità ai tipi esistenti dopo il fatto.
foreachloop all'inizio. Non è mai stato richiesto che l'oggetto implementasse IEnumerableper foreachfunzionare. È stato solo un convegno farlo.