次の方法で共有


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

プロシージャに 1 つ以上の Optional (Visual Basic) パラメーターがある場合、いずれかの暗黙のオーバーロードに対応するオーバーロードされたバージョンを定義することはできません。 詳細については、「プロシージャのオーバーロードに関する注意事項 (Visual Basic)」の「省略可能なパラメーターの暗黙のオーバーロード」を参照してください。

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

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

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

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

  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)
    

省略可能なパラメーターが複数ある場合

省略可能なパラメーターが複数あるパラメーターの場合、通常は 2 つ以上のオーバーロードされたバージョンが必要です。 たとえば、省略可能なパラメーターが 2 つあり、呼び出し元のコードがいずれかのパラメーターを渡すか渡さないかを、もう 1 つのパラメーターの有無に関係なく決める場合、オーバーロードされたバージョンは 4 つ (渡される引数の組み合わせの数) 必要です。

省略可能なパラメーターの数が増えると、オーバーロードはより複雑になります。 渡される引数の組み合わせの中にあり得ないものはないとすると、省略可能なパラメーターの数が N のとき、オーバーロードされたバージョンは 2 ^ N 個必要です。 オーバーロードされたバージョンをすべて定義する意味があるかどうかは、プロシージャの性質によって判断します。

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

  1. 省略可能な引数を、どのような組み合わせで受け取ることができるかをプロシージャのロジックから判断します。 1 つの省略可能なパラメーターが、他の省略可能なパラメーターに依存している場合、受け入れられない組み合わせが出てくることがあります。 たとえば、配偶者の名前を受け取るパラメーターと、配偶者の年齢を受け取るパラメーターがある場合、年齢は含まれるが名前が含まれない組み合わせは受け入れられません。

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

  3. 各定義では、Sub または Function キーワードの前に Overloads (Visual Basic) キーワードを指定します。

  4. 各宣言に続いて、呼び出し元のコードが、宣言のパラメーター リストに対応する引数のリストを渡してきた場合に実行するプロシージャ コードを記述します。

  5. 状況に応じて End Sub ステートメントか End Function ステートメントで各プロシージャを終了します。

参照

処理手順

プロシージャのトラブルシューティング (Visual Basic)

方法: プロシージャの複数のバージョンを定義する (Visual Basic)

方法: オーバーロードされたプロシージャを呼び出す (Visual Basic)

方法: 不特定数のパラメーターを受け取るプロシージャをオーバーロードする (Visual Basic)

概念

Visual Basic におけるプロシージャ

プロシージャのパラメーターと引数 (Visual Basic)

省略可能なパラメーター (Visual Basic)

パラメーター配列 (Visual Basic)

プロシージャのオーバーロード (Visual Basic)

オーバーロードの解決法 (Visual Basic)