パラメーター配列 (Visual Basic)
通常は、プロシージャ宣言で指定されているより多くの引数を使ってプロシージャを呼び出すことはできません。 不特定多数の引数が必要な場合は、パラメーター配列を宣言すると、値の配列をプロシージャのパラメーターとして渡すことができます。 プロシージャを定義するときには、パラメーター配列の要素の数がわからなくてもかまいません。 配列のサイズは、プロシージャの呼び出しごとに個別に決定されます。
ParamArray を宣言する
パラメーター リストでパラメーター配列を指定するには、ParamArray (Visual Basic) キーワードを使用します。 次の規則が適用されます。
プロシージャはパラメーター配列を 1 つだけ定義でき、これはプロシージャの定義の最後のパラメーターである必要があります。
パラメーター配列は値渡しで渡す必要があります。 プロシージャ定義で ByVal (Visual Basic) キーワードを使って明示的に指定することをお勧めします。
パラメーター配列は自動的に省略可能になります。 既定値は、パラメーター配列の要素型の空の 1 次元配列です。
パラメーター配列より前には、必須のパラメーターだけを指定します。 省略可能なパラメーターはパラメーター配列だけであることが必要です。
詳細については、「方法: 不特定数のパラメーターを受け取るプロシージャを定義する (Visual Basic)」を参照してください。
ParamArray を呼び出す
パラメーター配列を定義するプロシージャを呼び出す場合、引数は次のいずれかの方法で渡します。
なし。ParamArray (Visual Basic) 引数は省略できます。 この場合は、空の配列がプロシージャに渡されます。 Nothing (Visual Basic) キーワードを渡しても同じ結果になります。
コンマで区切った任意の数の引数のリスト。 各引数のデータ型は、暗黙的に ParamArray 要素型に変換できる必要があります。
パラメーター配列と同じ要素型の配列
いずれの場合も、プロシージャ内のコードでは、各要素が ParamArray データ型と同じデータ型の 1 次元配列として、パラメーター配列を扱う必要があります。
詳細については、「方法: 不特定数のパラメーターを受け取るプロシージャを呼び出す (Visual Basic)」を参照してください。
セキュリティに関するメモ |
---|
無限に増大する配列を扱う場合、アプリケーション内部の容量を超過してしまう可能性があります。 パラメーター配列を受け取る場合は、呼び出し元のコードが渡した配列のサイズをテストする必要があります。 このサイズがアプリケーションには大きすぎる場合、適切な手順を行う必要があります。 詳細については、「Visual Basic における配列」を参照してください。 |
例
説明
次の例では、関数 calcSum を定義して呼び出しています。 パラメーター args の ParamArray 修飾子を使用すると、関数で異なる数の引数を処理できます。
コード
Module Module1
Sub Main()
' In the following function call, calcSum's local variables
' are assigned the following values: args(0) = 4, args(1) = 3,
' and so on. The displayed sum is 10.
Dim returnedValue As Double = calcSum(4, 3, 2, 1)
Console.WriteLine("Sum: " & returnedValue)
' Parameter args accepts zero or more arguments. The sum
' displayed by the following statements is 0.
returnedValue = calcSum()
Console.WriteLine("Sum: " & returnedValue)
End Sub
Public Function calcSum(ByVal ParamArray args() As Double) As Double
calcSum = 0
If args.Length <= 0 Then Exit Function
For i As Integer = 0 To UBound(args, 1)
calcSum += args(i)
Next i
End Function
End Module