次の方法で共有


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

更新 : 2007 年 11 月

プロシージャに 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 パラメータを持つプロシージャは、一連のオーバーロードされたバージョンと同等なので、このプロシージャを、これらの暗黙のオーバーロードのいずれかに対応するパラメータ リストでオーバーロードすることはできません。詳細については、「プロシージャのオーバーロードに関する注意事項」を参照してください。

セキュリティ

無限に増大する配列を扱う場合、アプリケーション内部の容量を超過してしまう可能性があります。パラメータの配列を受け取る場合、呼び出し元のコードが渡す配列の長さをテストし、アプリケーションに対して大きすぎるようであれば、適切な手順を実行してください。

参照

処理手順

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

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

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

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

概念

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

プロシージャのパラメータと引数

省略可能なパラメータ

パラメータ配列

プロシージャのオーバーロード

オーバーロードの解決法