Я пытаюсь разобраться, когда раннее/позднее связывание происходит на С#.
Не виртуальные методы всегда ранние. Виртуальные методы всегда ограничены: компилятор добавляет дополнительный код для разрешения фактического метода привязки во время выполнения и проверки безопасности типа. Таким образом, полиморфизм подтипа использует позднюю привязку.
Вызов методов с использованием отражения является примером позднего связывания. Мы пишем код для достижения этого, а не компилятора. (Например, вызов COM-компонентов.)
VB.NET поддерживает скрытое связывание, когда параметр Strict выключен. Объект опоздает, когда ему присваивается переменная, объявленная как тип Object. Компилятор VB вставляет код для привязки к правильному методу во время выполнения и для улавливания недействительных вызовов. С# не поддерживает эту функцию.
Я направляюсь в правильном направлении?
Как насчет вызова делегатов и вызова метода с помощью ссылки на интерфейс? Это раннее или позднее связывание?