ОК, я понял тонкую разницу, когда перегрузка функции отличается от многократной отправки.
В основном, разница в том, какой метод вызывать, выбран во время выполнения или во время компиляции. Теперь я знаю, что все это говорили, но без четкого примера это звучит ОЧЕНЬ очевидно, учитывая, что C # статически типизирован, а языки с множественной диспетчеризацией (по-моему, по крайней мере мне) кажутся динамически типизированными. До сих пор только с этим определением множественная диспетчеризация и перегрузка функций звучали для меня совершенно одинаково.
Случай, когда это имеет реальное значение, - это когда у вас есть 2 перегрузки метода, которые различаются по типу параметра, но эти 2 типа являются полиморфными, и вы вызываете ссылку, объявленную как более высокий тип, который имеет объект более низкого типа ...
(Если кто-то может придумать лучший способ выразить это, пожалуйста, не стесняйтесь редактировать этот ответ)
Пример:
int CaptureSpaceShip(IRebelAllianceShip ship) {}
int CaptureSpaceShip(XWing ship) {}
void Main() {
IRebelAllianceShip theShip = new XWing();
CaptureSpaceShip(theShip);
}
XWing, очевидно, реализует IRebelAllianceShip.
В этом случае будет вызван первый метод, тогда как, если в C # реализована множественная диспетчеризация, будет вызван второй метод.
Извините за перефразировку документа ... Мне кажется, это самый простой способ объяснить это различие, чем просто чтение определений для каждого метода отправки.
Для более формального объяснения:
http://en.wikipedia.org/wiki/Double_dispatch#Double_dispatch_is_more_than_function_overloading