Il collegamento dinamico è il processo di connessione di una funzione (chiamata di procedura) a un metodo specifico (sequenza di codice) in fase di esecuzione. Ciò significa che la funzione da eseguire con un metodo rimane sconosciuta fino all'esecuzione -tempo. Il binding dinamico viene anche definito binding a tempo parziale o binding tardivo.
Il concetto di legame è strettamente correlato ad altri concetti di programmazione orientati agli oggetti come l'ereditarietà e il polimorfismo. Binding si riferisce semplicemente al collegamento tra la definizione del metodo e la chiamata al metodo. Gli oggetti reali vengono utilizzati durante il runtime per il binding. L'associazione dinamica consente agli sviluppatori di interfacciare nuove sequenze di codice e oggetti con un sistema senza alterare il codice esistente, eliminando così le dichiarazioni di commutazione. L'override del metodo è un buon esempio di associazione dinamica.
L'opposto del collegamento dinamico è il collegamento statico. A differenza del collegamento dinamico, l'associazione statica si verifica durante la compilazione. A volte viene definito vincolo anticipato perché l'associazione si verifica prima dell'esecuzione dell'applicazione. Un buon esempio di associazione statica è l'overloading del metodo. Un'altra differenza fondamentale tra i due tipi di binding è che il binding statico utilizza le informazioni di classe per il binding mentre il binding dinamico utilizza gli oggetti per risolvere il binding. Il momento in cui si verifica l'associazione influisce sulle prestazioni generali del programma. Se il legame si verifica prima, la sicurezza e l'efficienza aumentano mentre la flessibilità diminuisce.