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

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

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

  1. ParamArray パラメーターよりもオーバーロードされたバージョンの方が、プロシージャと呼び出し元のコードのロジックに多くのメリットがもたらされることを確認します。 「プロシージャのオーバーロードに関する注意事項」の「オーバーロードと ParamArray」をご覧ください。

  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 セキュリティ

無限に大きくなる可能性がある配列を処理する場合は常に、アプリケーションの何らかの内部容量が超過するリスクがあります。 パラメーター配列を受け入れる場合は、呼び出し元のコードから渡された配列の長さをテストし、それがアプリケーションにとって大きすぎる場合は、適切な措置を講じる必要があります。

関連項目