パラメーター配列 (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

参照

参照

Optional (Visual Basic)

UBound

概念

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

プロシージャのパラメーターと引数 (Visual Basic)

引数の値渡しと参照渡し (Visual Basic)

位置と名前による引数渡し (Visual Basic)

省略可能なパラメーター (Visual Basic)

プロシージャのオーバーロード (Visual Basic)

Visual Basic における型チェック

Visual Basic における配列