Bien, entendí la sutil diferencia donde la sobrecarga de funciones es diferente de la distribución múltiple.
Básicamente, la diferencia es si el método para llamar se elige en tiempo de ejecución o en tiempo de compilación. Ahora, sé que todo el mundo dijo esto, pero sin un ejemplo claro, esto suena MUY obvio, dado que C# está tipado estáticamente y los lenguajes de despacho múltiple (al parecer para mí, al menos) parecen estar escritos dinámicamente. Hasta ahora, con solo esa definición, el despacho múltiple y la sobrecarga de funciones me parecían exactamente iguales.
El caso donde esto hace una diferencia real es cuando tienes 2 sobrecargas de un método que difieren en el tipo de un parámetro, pero los 2 tipos son polimórficos, y llamas con una referencia declarada como el tipo más alto, que tiene un objeto del tipo menor ... (Si alguien puede pensar en una mejor manera de expresar esto, no dude en para modificar esta respuesta)
Ejemplo:
int CaptureSpaceShip(IRebelAllianceShip ship) {}
int CaptureSpaceShip(XWing ship) {}
void Main() {
IRebelAllianceShip theShip = new XWing();
CaptureSpaceShip(theShip);
}
XWING obviamente implementa IRebelAllianceShip. En este caso, se llamará al primer método, mientras que si C# implementó el despacho múltiple, se invocará el segundo método.
Disculpa por el doc rehash ... Esta me parece la manera más clara de explicar esta diferencia, en lugar de solo leer las definiciones para cada método de despacho.
Para una explicación más formal: http://en.wikipedia.org/wiki/Double_dispatch#Double_dispatch_is_more_than_function_overloading
Este es un buen ejemplo de la gran diferencia. –
Gracias! Necesitaba un ejemplo como este. – John
@Daniel Magliola, tenga en cuenta que el envío dinámico ahora es posible en C# 4.0 mediante la utilización de – RichardOD