Nach einem Blick auf, wie Go Schnittstellen behandelt und mag es, begann ich darüber nachzudenken, wie Sie ähnliche Ente-Typisierung in C# wie dies erreichen könnten:Implementierung sichere duck-Typisierung in C#
Die DuckTyper.Adapt
Methode verwenden würde System.Reflection.Emit
um einen Adapter im laufenden Betrieb zu bauen. Vielleicht hat jemand schon so etwas geschrieben. Ich denke, es ist nicht viel anders als das, was spöttische Frameworks schon tun.
Allerdings würde dies zur Laufzeit Ausnahmen auslösen, wenn Mallard
nicht die richtigen IDuck
Methoden hat. Um den Fehler früher zur Kompilierzeit zu bekommen, müsste ich eine MallardToDuckAdapter
schreiben, die genau das ist, was ich vermeiden möchte.
Gibt es einen besseren Weg?
bearbeiten: anscheinend der richtige Begriff für das, was ich "sichere Ente-Typisierung" nennen, ist structural typing.
Ich habe dies schon vorher gewünscht und das system.xml.serialization-System so angepasst, dass es mit den generischen system.runtime.serialization-Formatierern funktioniert. –
Außerdem: überprüft Go das zur Kompilierzeit oder nur zur Laufzeit? Wenn Letzteres, sie haben keine neuen Lösungen für das Problem zur Verfügung gestellt, nur die zusätzlichen Adapt-Code, den Sie bereits erwähnt. –
Yeah, das Schreiben des Adapters würde nicht als Duck Typisierung gelten, denn es ist normale C# Eingabe ... –