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