次の方法で共有


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

プロシージャに ParamArray パラメーターがある場合、パラメーター配列の 1 次元配列を取得するオーバーロードされたバージョンを定義することはできません。 詳細については、「プロシージャのオーバーロードに関する考慮事項」の「ParamArray パラメーターの暗黙的 なオーバーロード」を参照してください

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

  1. プロシージャと呼び出しコード ロジックが、 ParamArray パラメーターよりもオーバーロードされたバージョンの利点があることを確認します。 「プロシージャのオーバーロードに 関する考慮事項」の「オーバーロードと ParamArrays」を参照してください。

  2. パラメーター リストの変数部分でプロシージャが受け入れる必要がある指定された値の数を決定します。 これには値がない場合が含まれる場合があり、1 次元配列の場合が含まれる場合があります。

  3. 指定できる値の数ごとに、対応するパラメーター リストを定義する Sub または Function 宣言ステートメントを記述します。 このオーバーロードされたバージョンでは、 Optional または ParamArray キーワードを使用しないでください。

  4. 各宣言で、 Sub キーワードまたは Function キーワードの前に Overloads キーワードを付けます。

  5. 各宣言の後に、呼び出し元のコードがその宣言のパラメーター リストに対応する値を提供するときに実行するプロシージャ コードを記述します。

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

次の例は、 ParamArray パラメーターを使用して定義されたプロシージャと、同等のオーバーロードされたプロシージャのセットを示しています。

Sub p(ByVal d As Date, ByVal ParamArray c() As Char)
' The preceding definition is equivalent to the following overloads.
' Overloads Sub p(ByVal d As Date)
' Overloads Sub p(ByVal d As Date, ByVal c() As Char)
' Overloads Sub p(ByVal d As Date, ByVal c1 As Char)
' Overloads Sub p(ByVal d As Date, ByVal c1 As Char, ByVal c2 As Char)
' And so on, with an additional Char argument in each successive overload.

このようなプロシージャを、パラメーター配列の 1 次元配列を受け取るパラメーター リストでオーバーロードすることはできません。 ただし、他の暗黙的なオーバーロードのシグネチャを使用できます。 次の宣言は、これを示しています。

' The following overload is not valid because it takes an array for the parameter array.
' Overloads Sub p(ByVal x As Date, ByVal y() As Char)
' The following overload takes a single value for the parameter array and is valid.
Overloads Sub p(ByVal z As Date, ByVal w As Char)

オーバーロードされたバージョンのコードは、呼び出し元のコードが ParamArray パラメーターに 1 つ以上の値を指定したかどうかをテストする必要はありません。 Visual Basic は、呼び出し元の引数リストに一致するバージョンにコントロールを渡します。

コードをコンパイルする

ParamArray パラメーターを持つプロシージャは、オーバーロードされた一連のバージョンに相当するため、これらの暗黙的なオーバーロードのいずれかに対応するパラメーター リストを使用して、このようなプロシージャをオーバーロードすることはできません。 詳細については、「 プロシージャのオーバーロードに関する考慮事項」を参照してください。

.NET Framework のセキュリティ

無期限に大きくなる可能性がある配列を処理するたびに、アプリケーションの内部容量がオーバーランするリスクがあります。 パラメーター配列を受け入れる場合は、呼び出し元のコードが渡された配列の長さをテストし、アプリケーションに対して大きすぎる場合は適切な手順を実行する必要があります。

こちらも参照ください