Dopo aver guardato come Go gestisce le interfacce e piacerà, ho iniziato a pensare a come si potrebbe raggiungere simili anatra tipizzazione in C# come questo:Implementazione sicura anatra tipizzazione in C#
Il metodo DuckTyper.Adapt
userebbe System.Reflection.Emit
per creare un adattatore al volo. Forse qualcuno ha già scritto qualcosa di simile. Immagino che non sia troppo diverso da ciò che i quadri beffardi già fanno.
Tuttavia, questo genererebbe eccezioni a run-time se Mallard
non ha effettivamente i metodi IDuck
corretti. Per ottenere l'errore prima al momento della compilazione, dovrei scrivere un MallardToDuckAdapter
che è esattamente quello che sto cercando di evitare.
C'è un modo migliore?
modificare: a quanto pare il termine corretto per quello che io chiamo "sicuro duck-typing" è structural typing.
Ho desiderato in precedenza, adattando il sistema System.xml.serialization ai file di formattazione generici system.runtime.serialization. –
Inoltre: Go controlla questo in fase di compilazione, o solo in fase di esecuzione? Se quest'ultimo non ha fornito nuove soluzioni al problema, solo il codice Adapt extra che hai già menzionato. –
Sì, scrivere l'adattatore non si qualifica come digitazione anatra, perché è normale digitando C# ... –