Ответ 1
Нет.
Динамическая отправка. Фактическая цепочка групп/сигнатуры/переопределения метода привязана во время компиляции. Вызываемый метод зависит от фактического типа времени выполнения объекта, но фактическая интерпретация не выполняется. Он по-прежнему будет версией метода статической привязки.
Вот пример в С#.
class Foo {
public override string ToString() { return "foo ToString"; }
}
void Example(object p1) {
p1.ToString();
}
Вызов p1.ToString - это пример динамической отправки. Код статически привязывается к методу ToString. Однако это виртуальный метод, поэтому фактический .ToString(), который будет вызван, не будет известен до выполнения, но гарантирован, чтобы вызвать метод .ToString(). Это будет ToString фактического типа p1. Поэтому, если p1 на самом деле является экземпляром Foo, вызывается Foo:: ToString.
Динамическое связывание. Фактический метод привязан во время выполнения и подлежит интерпретации на основе семантики языка или структуры представления. Это может завершиться неудачей из-за невозможности привязки.
Пример:
void CallBar(object o) {
var method = o.GetType().GetMethod("Bar");
method.Invoke(new object[] {o});
}
В этом случае мы пытаемся вызвать метод "Бар" на рассматриваемом объекте. Ключевое слово пытается. Вполне возможно, что на объекте не будет "Бар" . Но это определяется во время выполнения динамически привязки к методу "Бар" .
То, что у них больше всего общего, - это обе операции (вероятно) зависят от типа среды выполнения объекта.
ИЗМЕНИТЬ
Добавлено еще несколько примеров по запросу OP