Doppelter Versand in C #?
Ich habe gehört/gelesen der Begriff aber nicht ganz verstehen, was es bedeutet.
Wann sollte ich diese Technik verwenden und wie sollte ich es verwenden? Kann mir jemand einen guten code-Beispiel?
InformationsquelleAutor der Frage Oded | 2008-09-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dem Besucher-Muster ist eine Möglichkeit, ein double-dispatch in einer Objekt-orientierten Art und Weise.
Es ist nützlich, wenn Sie wollen, zu wählen, welche Methode zu verwenden, für ein gegebenes argument, basierend auf Ihren Typ zur Laufzeit statt compile-Zeit.
Double dispatch ist ein besonderer Fall von multiple dispatch.
Beim Aufruf einer virtuellen Methode auf einem Objekt, das als single-Versand, weil die eigentliche Methode aufgerufen wird, hängt von der Art des einzelnen Objekts.
Für double dispatch, sowohl den Typ des Objekts und der Methode, die alleinige argument des Typs berücksichtigt. Das ist wie Methode überlast Auflösung, mit der Ausnahme, dass das argument Typ wird zur Laufzeit bestimmt in double-Versand statt statisch zur compile-Zeit.
In der multiple-dispatch, einer Methode können mehrere Argumente übergeben werden, und welche Implementierung verwendet wird, hängt von jedem argument den Typ. Die Reihenfolge der Arten bewertet werden, hängt von der Sprache. In LISP ist, prüft es jede Art vom ersten bis zum letzten.
Sprachen mit multiple dispatch machen Verwendung von generischen Funktionen, die nur die Funktion delcarations und sind nicht, wie generische Methoden, die Verwendung von Typ-Parametern.
Zu tun double-dispatch in C#Sie können erklären, eine Methode, bei der eine einzige Objekt-argument und dann bestimmte Methoden mit bestimmten Arten:
InformationsquelleAutor der Antwort Mark Cidade
Gut hey Leute, der code geschrieben von Mark nicht abgeschlossen, und was auch immer es nicht funktioniert.
So optimiert und abgeschlossen.
Dank Mark und die anderen für die schöne Erklärung, die auf Double-Dispatcher-pattern
InformationsquelleAutor der Antwort Zenwalker
Double-dispatch ist ein anderer name für die Besucher-Muster.
Ich habe einen Artikel, den ich schrieb vor ein paar Jahren über die Verwendung der Reflexion zur Umsetzung des Visitor-pattern. http://www.agileprogrammer.com/dotnetguy/articles/ReflectionVisitor.aspx
InformationsquelleAutor der Antwort Brad Wilson
C# 4 bringt den pseudo-Typ
dynamic
was löst der Aufruf der Funktion zur Laufzeit (statt compile-Zeit). (Das ist die Laufzeit-Typ des Ausdrucks verwendet wird). Doppel- (oder multi-dispatch) kann vereinfacht werden zu:Seien Sie vorsichtig, wenn mit integralen Typen. Da
dynamic
behandelt wird, alsSystem.Object
es wird nie rufen Sievoid Foo(int x)
im Beispiel oben.Beachten Sie auch, dass durch die Verwendung
dynamic
Sie verhindern, dass der compiler eine statische Analysatoren zur Untersuchung dieser Teil des Codes. Sie sollten sorgfältig prüfen, die Verwendungdynamic
.InformationsquelleAutor der Antwort Micha Wiedenmann