Что такое раннее и позднее связывание? Преимущества и недостатки.

Слышала, что в C# есть такие понятия как раннее и поздее связывание.

Когда стоит использовать одно, когда другое? Чем они отличаются? Есть ли у них преимущества/недостатки?

При раннем связывании компилятор заранее знает адрес с типом, с которым будет оперировать. При позднем связывании компилятор узнаёт этот адрес в процессе выполнения программы.

Например когда мы добавляем dll библиотеку в проект путём добавления ссылки Reference/Add Reference - это раннее связывание, т.к. мы заранее даём знать этот адрес компилятору. Когда же мы используем рефлексию (или банально делаем перегрузку метода) - компилятор изначально не знает по какому адресу ему придётся пойти - это и называется поздним связыванием. По-умолчанию при создании метода в классе связывание раннее.

Сказать что одно явно лучше другого однозначно невозможно. Это как сравнивать языки программирования или аналогичные технологии на разных языках : всё сделано для чего-то, у всего своё применение.

Однако могу сказать точно, что преимуществом раннего связывания является гарантия того, что в процессе выполнения у нас не возникнет возможных проблем. Но при этом, используя раннее связывание, мы лишаемся гибкости позднего связывания. Всё-же Иногда необходимая информация может быть недоступной разработчику до момента выполнения)