OK, ich habe den subtilen Unterschied verstanden, bei dem sich die Funktionsüberlastung vom Mehrfachversand unterscheidet.
Der Unterschied besteht im Wesentlichen darin, ob die zu rufende Methode zur Laufzeit oder zur Kompilierzeit ausgewählt wird. Nun, ich weiß, jeder hat das gesagt, aber ohne ein klares Beispiel klingt das SEHR offensichtlich, wenn man bedenkt, dass C# statisch getippt ist und mehrere Dispatch-Sprachen (anscheinend zumindest für mich) dynamisch typisiert zu sein scheinen. Mit genau dieser Definition klang für mich Multi-Dispatch und Function Overloading genau gleich. Der Fall, in dem dies einen wirklichen Unterschied macht, ist, wenn Sie 2 Überladungen einer Methode haben, die sich vom Typ eines Parameters unterscheiden, aber die 2 Typen sind polymorph, und Sie rufen mit einer als höher deklarierten Referenz auf ein Objekt des unteren Typ hat ... (Wenn jemand einen besseren Weg denken kann, dies zum Ausdruck zu bringen, können Sie sich diese Antwort zu bearbeiten)
Beispiel:
int CaptureSpaceShip(IRebelAllianceShip ship) {}
int CaptureSpaceShip(XWing ship) {}
void Main() {
IRebelAllianceShip theShip = new XWing();
CaptureSpaceShip(theShip);
}
XWing IRebelAllianceShip offensichtlich implementiert. In diesem Fall wird die erste Methode aufgerufen, während, wenn C# multiples Dispatch implementiert wäre, die zweite Methode aufgerufen würde.
Entschuldigung wegen des doc rehash ... Dies scheint mir der klarste Weg zu sein, diesen Unterschied zu erklären, anstatt nur die Definitionen für jede Versandmethode zu lesen.
Für eine formelle Erklärung: http://en.wikipedia.org/wiki/Double_dispatch#Double_dispatch_is_more_than_function_overloading
Dies ist ein schönes Beispiel für den großen Unterschied. –
Danke! Ich brauchte ein Beispiel wie dieses. – John
@Daniel Magliola, bitte beachten Sie, dynamische Versand ist jetzt möglich in C# 4.0 durch Verwendung von dynamischen – RichardOD