方法: 不特定数のパラメーターを受け取るプロシージャをオーバーロードする (Visual Basic)
プロシージャに ParamArray (Visual Basic) パラメーターがある場合、パラメーター配列として 1 次元配列を使用するオーバーロードされたバージョンを定義することはできません。 詳細については、「プロシージャのオーバーロードに関する注意事項 (Visual Basic)」の「パラメーター ParamArray の暗黙のオーバーロード」を参照してください。
可変数のパラメーターを持つプロシージャをオーバーロードするには
プロシージャと呼び出し元のコード ロジックが、ParamArray パラメーターよりもオーバーロードされたバージョンを有効に活用していることを確認します。 「プロシージャのオーバーロードに関する注意事項 (Visual Basic)」の「オーバーロードと ParamArray」を参照してください。
パラメーター リストの可変部分で、プロシージャが受け取る値の数を確認します。 これには、値がない場合も、単独の 1 次元配列の場合も含まれます。
受け入れ可能な値のそれぞれの数に対し、対応するパラメーター リストを定義する Sub または Function 宣言ステートメントを記述します。 このオーバーロードされたバージョンでは Optional または ParamArray キーワードを使用しないでください。
各定義では、Sub または Function キーワードの前に Overloads (Visual Basic) キーワードを指定します。
各宣言に続いて、呼び出し元のコードが、宣言のパラメーター リストに対応する値を渡してきた場合に実行するプロシージャ コードを記述します。
状況に応じて End Sub ステートメントか End Function ステートメントで各プロシージャを終了します。
使用例
次の例では、ParamArray (Visual Basic) パラメーターで定義されたプロシージャを示し、これに相当する一連のオーバーロードされたプロシージャを示します。
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 パラメーターを持つプロシージャは、一連のオーバーロードされたバージョンと同等なので、このプロシージャを、これらの暗黙のオーバーロードのいずれかに対応するパラメーター リストでオーバーロードすることはできません。 詳細については、「プロシージャのオーバーロードに関する注意事項 (Visual Basic)」を参照してください。
セキュリティ
無限に増大する配列を扱う場合、アプリケーション内部の容量を超過してしまう可能性があります。 パラメーターの配列を受け取る場合、呼び出し元のコードが渡す配列の長さをテストし、アプリケーションに対して大きすぎるようであれば、適切な手順を実行してください。
参照
処理手順
プロシージャのトラブルシューティング (Visual Basic)
方法: プロシージャの複数のバージョンを定義する (Visual Basic)
方法: オーバーロードされたプロシージャを呼び出す (Visual Basic)
方法: 省略可能なパラメーターを受け取るプロシージャをオーバーロードする (Visual Basic)