多重定義
動作を選択する際に用いられる代表的な文脈情報としては、型付けられたプログラミング言語においては関数や演算子に実引数(演算子ならばオペランド)として与えられた式や変数に関連付けられた型の情報が用いられる(稀ではあるが戻り値の型を利用できるプログラミング言語も存在する)。関数の名称とそれらの型情報の組を合わせたものをシグネチャと呼ぶが、プログラム内でシグネチャが唯一に決まれば、関数名やメソッド名、演算子の記号が重複していても呼び出すべき対象を唯一に決定することができる。このような型付けによる多重定義は、暗黙の型変換あるいは型強制)、継承あるいは包含、総称型、あるいはパラメーター付型と並んでプログラミング言語において多態性を実現するための一つの手段である。
理論的には関数の名前や演算子記号は単なる記号であり、意味的必然があるわけではないので、これを反映して多重定義を許すプログラミング言語では多重定義された関数や演算子、メソッドの意味や動作の定義はかなり自由に行うことができる(演算子については構文解析の都合上、優先順位などが制限される場合も有る)。とはいえ関数名やメソッド、特に演算子の用法には各分野及びプログラミング言語毎に慣習が育っている場合があり、著名な関数(例えば数学関数のsinなど)やメソッド、演算子に対して慣習とあまりにかけ離れた意味、即ち動作の定義を与えるとプログラムの可読性の著しい低下をもたらす可能性があるので注意が必要である。
デフォルト引数(オプション引数)をサポートしない言語(Javaや、バージョン4.0よりも前のC#など)では、多重定義によってデフォルト引数と類似の機能を実現することができる。