動態分派

在計算機科學中 ， 動態分派 （ Dynamic dispatch ） 是指運行時選擇哪一個多態的實現 （ 具體的方法或函數 ） 來調用的過程 。 動態分派通常被應用於面向對象編程 （ OOP ） 的語言和系統 ， 並被認爲是一個主要特點 。 面向對象的系統把一個問題看作是一系列通過名字引用來制定操作的相互影響的物體 。 多態性是指一些可互換的物體雖有相同名字但卻在行爲上不同的現象 。 例如 ， 一個文件對象和一個數據庫對象都有一個儲存記錄的方法來記錄需要存儲的的個人記錄 ， 但是二者的實現卻不同 。 一個程序可以有對文件或數據庫的訪問 。 當一個程序調用對象的存儲記錄時 ， 有一些東西需要來決定採取哪種行爲 。 如果有人認爲OOP僅僅指給對象發送信息 ， 那麼在這個例子中程序僅僅把一條存儲記錄信息發送給了一個未知類型的對象 ， 而把如何將這條信息發送給正確對象交給運行支持系統來處理 。 這個對象來決定它執行哪些行爲 。 與動態分派成對比的是靜態分派 ， 在靜態分派中 ， 對一個多態操作的實現是在編譯時間就選擇好的 。 動態分派的目的在於支持那些當在編譯時間內無法決定一個多態操作的合適的實現因爲這個決定取決於這個操作的一個或多個實際參數的運行類型的情形 。 動態分派和動態綁定不同 。 在選擇操作的上下文中 ， 綁定把名稱和操作相關聯 ， 而分派則在確定名稱所引用的操作之後選擇操作的實現 。 通過使用動態分派 ， 名稱可以在編譯時被綁定到多態操縱中 ， 但是直到運行時才執行該實現 。 雖然動態分派不暗示後期綁定 ， 但後期綁定意味着動態分派 ， 因爲綁定決定了什麼可以分派 。