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' IEnumerable
interfaccia, sarebbe automaticamente iterabile da un foreach
ciclo. Questo ha senso per me, dato che è supportato da un'interfaccia e se dovessi avere la mia Iterator
funzione 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 IEnumerable
o INotifyPropertyChanged
per 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 await
funzionalità ai tipi esistenti dopo il fatto.
foreach
loop all'inizio. Non è mai stato richiesto che l'oggetto implementasse IEnumerable
per foreach
funzionare. È stato solo un convegno farlo.