プロシージャに ParamArray パラメーターがある場合、パラメーター配列の 1 次元配列を取得するオーバーロードされたバージョンを定義することはできません。 詳細については、「プロシージャのオーバーロードに関する考慮事項」の「ParamArray パラメーターの暗黙的 なオーバーロード」を参照してください。
可変数のパラメーターを受け取るプロシージャをオーバーロードするには
プロシージャと呼び出しコード ロジックが、
ParamArrayパラメーターよりもオーバーロードされたバージョンの利点があることを確認します。 「プロシージャのオーバーロードに 関する考慮事項」の「オーバーロードと ParamArrays」を参照してください。パラメーター リストの変数部分でプロシージャが受け入れる必要がある指定された値の数を決定します。 これには値がない場合が含まれる場合があり、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 パラメーターを持つプロシージャは、オーバーロードされた一連のバージョンに相当するため、これらの暗黙的なオーバーロードのいずれかに対応するパラメーター リストを使用して、このようなプロシージャをオーバーロードすることはできません。 詳細については、「 プロシージャのオーバーロードに関する考慮事項」を参照してください。
.NET Framework のセキュリティ
無期限に大きくなる可能性がある配列を処理するたびに、アプリケーションの内部容量がオーバーランするリスクがあります。 パラメーター配列を受け入れる場合は、呼び出し元のコードが渡された配列の長さをテストし、アプリケーションに対して大きすぎる場合は適切な手順を実行する必要があります。
こちらも参照ください
- 手順
- プロシージャのパラメーターと引数
- 省略可能なパラメーター
- パラメーター配列
- プロシージャのオーバーロード
- トラブルシューティングの手順
- 方法: プロシージャ の複数のバージョンを定義する
- 方法: オーバーロードされたプロシージャ を呼び出す
- 方法: 省略可能なパラメーターを受け取るプロシージャをオーバーロード
- オーバーロードの解決
.NET