適用可能なメソッドの選択

まず、ターゲット クラスまたはその親クラスのいずれかに存在し、要求された名前を持つすべてのメソッドの完全なセット(同一のシグネチャを持つメソッドを除く)から始めます。このセットから、メソッドにコード化されている可視属性に基づいて、呼び出し側プログラムから見えないメソッドが次のように破棄されます。

属性 可視性
PRIVATE 呼び出し側クラスがターゲット クラスと同じ場合にのみ表示される
PUBLIC 常に表示される
PROTECTED 呼び出し側クラスがターゲット クラスから派生している場合にのみ表示される
INTERNAL ターゲット クラスが呼び出し側クラスと同じアセンブリに含まれている場合にのみ表示される
PROTECTED INTERNAL 呼び出し側クラスがターゲット クラスから派生している場合、または呼び出し側クラスがターゲット クラスと同じアセンブリに含まれている場合にのみ表示される

次に、必要なメソッドがインスタンス メソッド(オブジェクト インスタンスに適用されるメソッド)である場合は、すべての静的メソッドが破棄されます。同様に、必要なメソッドが静的メソッドである場合は、すべてのインスタンス メソッドが破棄されます。

ここで、各メソッドが順番に検査され、標準形式で適用可能かどうか確認されます。この判別は次のように行われます。


  1. 引数の数がメソッド内のパラメータの数と異なる場合、そのメソッドは破棄されます。
  2. ターゲット メソッド内のパラメータの型が MicroFocus.COBOL.Program.Reference(参照により渡される一般的な COBOL データ)である場合、引数の型は一致すると見なされます(.NET ネイティブ型を除く)。
  3. 各引数で明示的なパラメータ受け渡し方式(BY CONTENT、BY VALUE、または BY OUTPUT)が指定されている場合、その受け渡し方式が検査対象のメソッド内のパラメータの定義と対応している必要があります。
  4. REFERENCE パラメータまたは OUTPUT パラメータについては、引数の型がパラメータの型と完全に一致している必要があります。

    VALUE パラメータについては、引数の型から対応するパラメータの型への暗黙的な変換が存在する必要があります。これらの暗黙的な変換のいずれかで切り捨てが必要な場合、そのメソッドは「切り捨て一致」と考えられます。「暗黙的な変換」を参照してください。

これらの規則に基づいてメソッドが適用不可と判別された場合は、次の両方の条件を満たしているときに限り、拡張形式のメソッドとの照合が試みられます。


メソッドの拡張形式は、標準形式から派生した形式です。この場合、パラメータの合計数が呼び出し側の引数の数と同じになるように、配列要素と同じ型を持つ 0 個以上の値パラメータで配列パラメータが置き換えられます。同じ拡張シグネチャを持つ標準形式のメソッドがクラスにすでに存在する場合、そのメソッドは適用不可と判別されます。それ以外の場合は、上記の標準形式の検査と同様の方法で、拡張形式の適用性が検査されます。

上記の選択手順の後、次のように処理されます。