方法: 省略可能なパラメーターを受け取るプロシージャをオーバーロードする (Visual Basic)

プロシージャに 1 つ以上の Optional パラメーターがある場合、暗黙的なオーバーロードのいずれかに一致するオーバーロードされたバージョンを定義することはできません。 詳細については、「プロシージャのオーバーロードに関する注意事項」の「Optional パラメーターの暗黙的なオーバーロード」をご覧ください。

1 つの省略可能なパラメーター

1 つの省略可能なパラメーターを受け取るプロシージャをオーバーロードするには

  1. パラメーター リストに省略可能なパラメーターが含まれた、Sub または Function 宣言ステートメントを記述します。 このオーバーロードされたバージョンでは、Optional キーワードは使用しないでください。

  2. Sub または Function キーワードの前に Sub キーワードを指定します。

  3. 呼び出し元のコードで省略可能な引数が指定されたときに実行する必要があるプロシージャ コードを記述します。

  4. プロシージャを、必要に応じて End Sub または End Function ステートメントで終了します。

  5. パラメーター リストに省略可能なパラメーターが含まれていない点を除いて、最初の宣言と同じである 2 番目の宣言ステートメントを記述します。

  6. 呼び出し元のコードで省略可能な引数が指定されないときに実行する必要があるプロシージャ コードを記述します。 プロシージャを、必要に応じて End Sub または End Function ステートメントで終了します。

    次の例は、省略可能なパラメーターで定義されたプロシージャ、2 つのオーバーロードされたプロシージャの同等のセット、無効および有効なオーバーロードされたバージョンの例を示しています。

    Sub q(ByVal b As Byte, Optional ByVal j As Long = 6)
    
    ' The preceding definition is equivalent to the following two overloads.
    ' Overloads Sub q(ByVal b As Byte)
    ' Overloads Sub q(ByVal b As Byte, ByVal j As Long)
    
    ' Therefore, the following overload is not valid because the signature is already in use.
    ' Overloads Sub q(ByVal c As Byte, ByVal k As Long)
    ' The following overload uses a different signature and is valid.
    Overloads Sub q(ByVal b As Byte, ByVal j As Long, ByVal s As Single)
    

複数の省略可能なパラメーター

複数の省略可能なパラメーターがあるプロシージャでは、通常、3 つ以上のオーバーロードされたバージョンが必要です。 たとえば、2 つの省略可能なパラメーターがあり、呼び出し元のコードが各パラメーターを相互に独立して指定または省略できる場合、4 つのオーバーロードされたバージョン (指定された引数の可能な組み合わせごとに 1 つ) が必要です。

省略可能なパラメーターの数が増えると、オーバーロードの複雑さが増します。 指定された引数の一部の組み合わせが許容されない場合を除き、N 個の省略可能なパラメーターには 2 ^ N 個のオーバーロードされたバージョンが必要となります。 プロシージャの性質によっては、オーバーロードされたバージョンをすべて定義することによってロジックが明確になることから、余分な労力をかけるだけの価値がある場合もあります。

複数の省略可能なパラメーターを受け取るプロシージャをオーバーロードするには

  1. プロシージャのロジックで許容される、指定された省略可能な引数の組み合わせを特定します。 ある省略可能なパラメーターが別の省略可能なパラメーターに依存する場合、許容されない組み合わせが生じる可能性があります。 たとえば、あるパラメーターが個人の名前を受け入れ、別のパラメーターがその個人の年齢を受け入れる場合、年齢を指定し、名前を省略する引数の組み合わせは許容されません。

  2. 指定された省略可能な引数の許容される組み合わせごとに、対応するパラメーター リストを定義する、Sub または Function 宣言ステートメントを記述します。 Optional キーワードは使用しないでください。

  3. 各宣言で、Sub または Function キーワードの前に Sub キーワードを指定します。

  4. 各宣言の後に、呼び出し元のコードでその宣言のパラメーター リストに対応する引数リストが指定されたときに実行する必要があるプロシージャ コードを記述します。

  5. 各プロシージャを、必要に応じて End Sub または End Function ステートメントで終了します。

関連項目