Wann sollte Duck Typing verwendet werden?

8

Frage

Ich habe jetzt viel über Duck Typing gelesen und ich verstehe das Konzept.

Was ich nicht verstanden habe, ist, in welchem ​​Fall es sinnvoll ist, die Vorteile einer stark typisierten Programmierung zugunsten von Duck Typing aufzugeben. In welchem ​​Fall würde man Duck Typing anstelle von Interfaces und Vererbung verwenden?

Ich meine, wenn Sie trotzdem sicherstellen müssen, dass ein Objekt, das an eine Methode übergeben wird, bestimmte Methoden implementiert, warum sollte ich nicht einfach eine Schnittstelle definieren?

Nur um klar zu sein, ich weiß, wie Duck Typing funktioniert. Ich möchte wissen, wann es wirklich Sinn macht, es zu benutzen.

Erläuterung:

In welchem ​​Fall würden Sie

verwenden? %Vor%

statt

%Vor%     
LuckyLikey 03.06.2015, 11:40
quelle

3 Antworten

13

C # hat aus einem bestimmten Grund eine starke Eingabe. Wenn Sie keinen gültigen Grund (wie COM-Interop) benötigen, um den dynamic -Typ zu verwenden, sollten Sie es wahrscheinlich wie die Pest vermeiden, sonst laufen Sie Gefahr, Probleme bei der Kompilierung in Laufzeitprobleme zu verwandeln. dynamic ist mächtig, aber leicht zu missbrauchen. Denken Sie lange darüber nach, ob Sie dynamisches Tippen wirklich brauchen - wenn Sie denken, dass es da ist, besteht die Möglichkeit, dass Sie das Problem anfänglich falsch behandeln und Ihren Code umgestalten müssen.

>

Um Ihre Frage speziell zu beantworten - ein möglicher Anwendungsfall war, wenn Sie Serialisierungscode schreiben und ein deserialisiertes Objekt, z. B. eine deserialisierte JSON-Struktur aus einer Web-API-Anfrage, akzeptieren müssen. Solche Methoden müssten mit jedem Typ umgehen, der ihnen gegeben wird, was eine Situation ist, in der die Verwendung von dynamic besser ist als die Alternative (dh eine Lastwagenladung der Reflexion).

Ein anderes Beispiel, das ich mir vorstellen kann, wäre die Interoperabilität mit Sprachen speziell in der Dynamic Language Runtime (zB JavaScript, IronPython, IronRuby, ...), und benötigt um eine Methode zu schreiben, die Typen aus solchen Sprachen akzeptiert.

Von Beginn der Visual C # 2012-Programmierung :

  

Vermeiden Sie für die meisten C # -Codes, die Sie schreiben, das Schlüsselwort dynamic . Wenn jedoch eine Situation entsteht, in der Sie brauchen, um sie zu benutzen, verwenden Sie sie und lieben Sie sie - und ersparen Sie sich einen Gedanken für die armen Programmierer der Vergangenheit, die dieses mächtige Werkzeug nicht zur Verfügung hatten / p>

    
Quackmatic 03.06.2015, 11:53
quelle
4

Duck-Typisierung wird häufig in C # verwendet, Sie wissen es meistens gar nicht. Der Compiler verwendet es viel unter dem Cover, für foreach -Anweisungen, für Linq, für await und für Auflistungsinitialisierer. Diese Frage gibt einen Überblick darüber.

Die andere Möglichkeit für die Verwendung der Ente ist das Keyword dynamic . Und lass uns Franc sein, du solltest es so weit wie möglich vermeiden. Aber es ist sehr nützlich, mit dynamischen Sprachen / Kontexten zu interagieren. Angenommen, Sie rufen einen Webdienst an, der mit einem schlecht definierten json antwortet (so können Sie ihn nicht einfach für eine bekannte Klasse deserialisieren). Es könnte viel einfacher für Sie sein, ihn als JObject zu verwenden, indem Sie json.Net verwenden und das JObject als a verwenden dynamic .

%Vor%

Ein weiterer Anwendungsfall ist ASP.NET MVC Viewmodels. Ein dynamisches Viewmodel kann sehr mächtig sein. Das Orchard CMS verwendet es sehr intensiv, und selbst wenn es ein wenig schwierig ist, es zuerst zu umschiffen, erlaubt es sehr mächtig Anwendungsfälle.

COM interop kommt mir auch in den Sinn.

    
Falanwe 03.06.2015 11:55
quelle
0

Duck Typisierung:

  

Bitte tun Sie dies, anstatt zu fragen, wer Sie sind.

Beispiel:

  

Hier sollte die Codierung einfach definiert und ausgeführt werden. Beispiel, hier sind   die Dinge, die ich möchte, dass das folgende Objekt etwas tut.

%Vor%
  

Dies ist das Ergebnis nach dem Test.

  

Also werden die obigen Objekte Dinge tun, die wir nur tun wollen.   Zusätzlich habe ich die Frage hinzugefügt, um sie zu fragen, wer sie sind,   auch. Hier ist der Code in C #.

%Vor%     
Kajornjit Songsaen 26.11.2017 11:23
quelle

Tags und Links