選択プロセスの一般的な目的は、特定の引数セットに対する最良一致(最も厳密に一致するもの)を得ることです。たとえば、クラス 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 つに絞り込めない場合は、あいまいな一致と見なされ、コンパイル エラーが生成されます。「より適切なメソッド オーバーロード」を参照してください。