OK, rozumiem subtelną różnicę, w której przeciążanie funkcji różni się od wielokrotnego wysyłania.
Zasadniczo różnica polega na tym, która metoda wywołania jest wybierana w czasie wykonywania lub podczas kompilacji. Teraz wiem, że wszyscy to powiedzieli, ale bez wyraźnego przykładu brzmi to BARDZO oczywiste, biorąc pod uwagę, że C# jest statycznie wpisane i wydaje się, że języki z wieloma wysyłkami (podobno przynajmniej dla mnie) są napisane dynamicznie. Do tej pory, z tą właśnie definicją, przeciążanie wielokrotnych wysyłek i funkcji brzmiało dokładnie tak samo dla mnie.
Przypadku, w którym robi to dużą różnicę, to gdy masz 2 przeciążenia metody, które różnią się typem parametru, ale 2 typy są polimorficzne i wywołujesz z referencją zadeklarowaną jako wyższy typ, który ma przedmiot dolnej typu ... (Jeśli ktoś może pomyśleć o lepszym sposobem, aby wyrazić to, proszę czuć się swobodnie edytować tę odpowiedź)
Przykład:
int CaptureSpaceShip(IRebelAllianceShip ship) {}
int CaptureSpaceShip(XWing ship) {}
void Main() {
IRebelAllianceShip theShip = new XWing();
CaptureSpaceShip(theShip);
}
XWing oczywiście implementuje IRebelAllianceShip. W tym przypadku zostanie wywołana pierwsza metoda, natomiast jeśli C# zaimplementowano wielokrotną wysyłkę, zostanie wywołana druga metoda.
Przepraszam za ponowne czytanie dokumentu ... Wydaje mi się, że jest to najczystszy sposób wyjaśnienia tej różnicy, a nie tylko przeczytania definicji dla każdej metody wysyłki.
na bardziej formalne wyjaśnienie: http://en.wikipedia.org/wiki/Double_dispatch#Double_dispatch_is_more_than_function_overloading
To jest ładny przykład głównej różnicy. –
Dzięki! Potrzebowałem takiego przykładu. – John
@ Daniel Magliola, proszę zauważyć, że dynamiczna wysyłka jest teraz możliwa w języku C# 4.0 z wykorzystaniem dynamicznego – RichardOD