選択プロセスの一般的な目的は、特定の引数セットに対する最良一致(最も厳密に一致するもの)を得ることです。たとえば、クラス A がクラス B から派生し、クラス B 自体は System.Object から派生すると仮定します。次の例では、指定された引数がいずれのターゲット メソッドの引数とも完全に一致しない場合であっても、「最も厳密な」規則が適用される仕組みを示します。
Class X. Static. Method-id. Method1. Procedure division using by value arg1 as object. *> method (i) End method method1. Method-id. Method1. Procedure division using by value arg1 as B. *> method (ii) End method method1. End static. End class X. Class Y. Static. Method-id. Main. 01 obj1 object. 01 obj2 type “Bâ€. 01 obj3 type “Aâ€. Invoke type “Xâ€::â€Method1â€(obj1) *> Uses method (i) Invoke type “Xâ€::â€Method1â€(obj2) *> Uses method (ii) Invoke type “Xâ€::â€Method1â€(obj3) *> also uses method (ii) since type B is ‘closer’ *> to type A than System.Object… End method main. End static. End class Y.
形式的には、適用可能な他のどのメソッド オーバーロードよりも適切なメソッド オーバーロードが選択されます。他のどのオーバーロードよりも適切なオーバーロードを 1 つに絞り込めない場合は、あいまいな一致と見なされ、コンパイル エラーが生成されます。「より適切なメソッド オーバーロード」を参照してください。