매개 변수 배열(Visual Basic)
일반적으로 프로시저 선언에 지정된 것보다 많은 인수를 가진 프로시저를 호출할 수 없습니다. 인수가 무한대로 필요한 경우에는 매개 변수 배열을 선언하여 프로시저가 매개 변수에 대한 값 배열을 받아들이도록 할 수 있습니다. 프로시저를 정의할 때 매개 변수 배열의 요소 수는 몰라도 됩니다. 배열의 크기는 프로시저에 대한 각 호출에 의해 개별적으로 결정됩니다.
ParamArray 선언
매개 변수 배열을 매개 변수 목록으로 나타내려면 ParamArray(Visual Basic) 키워드를 사용합니다. 이때 적용되는 규칙은 다음과 같습니다.
프로시저에서 매개 변수 배열을 하나만 정의할 수 있으며 프로시저 정의의 마지막 매개 변수로 정의해야 합니다.
매개 변수 배열은 값으로 전달되어야 합니다. 프로시저 정의에 명시적으로 ByVal(Visual Basic) 키워드를 사용하는 것이 바람직한 프로그래밍 습관입니다.
매개 변수 배열은 자동으로 선택적 인수로 지정되며 기본값은 매개 변수 배열 요소 형식의 빈 1차원 배열입니다.
매개 변수 배열 앞에 오는 모든 매개 변수는 필수적 요소여야 하며 매개 변수 배열만 선택적 매개 변수여야 합니다.
ParamArray 호출
매개 변수 배열을 정의하는 프로시저를 호출할 때는 다음 중 한 가지 방법으로 인수를 지정할 수 있습니다.
없음 즉, ParamArray(Visual Basic) 인수를 생략할 수 있습니다. 이 경우에는 빈 배열이 프로시저로 전달됩니다. Nothing(Visual Basic) 키워드를 전달할 수도 있는데, 그 결과는 동일합니다.
쉼표로 구분된 임의 개수의 인수 목록. 각 인수의 데이터 형식은 암시적으로 ParamArray 요소 형식으로 변환할 수 있어야 합니다.
매개 변수 배열의 요소 형식과 동일한 요소 형식의 배열
모든 경우, 프로시저 내의 코드에서는 매개 변수 배열을 요소의 데이터 형식이 ParamArray 데이터 형식과 동일한 1차원 배열로 처리됩니다.
보안 정보 |
---|
무제한으로 커질 수 있는 배열을 처리할 때마다 응용 프로그램의 내부 용량에 오버런이 발생할 위험이 있습니다.매개 변수 배열을 받는 경우 호출 코드에서 받은 배열의 크기를 테스트해야 합니다.이때 크기가 너무 커서 해당 배열을 응용 프로그램에 사용할 수 없을 경우에는 적절한 조치를 취합니다.자세한 내용은 Visual Basic의 배열을 참조하십시오. |
예제
다음 예제에서는 정의 하 고이 함수를 호출 calcSum. ParamArray 매개 변수에 대 한 한정자 args 함수가 가변 개수의 인수를 받아들일 수 있습니다.
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
다음 예제에서는 매개 변수 배열이 있는 프로시저를 정의하고 매개 변수 배열에 전달되는 모든 배열 요소의 값을 출력합니다.
Sub studentScores(ByVal name As String, ByVal ParamArray scores() As String)
Debug.WriteLine("Scores for " & name & ":" & vbCrLf)
' Use UBound to determine largest subscript of the array.
For i As Integer = 0 To UBound(scores, 1)
Debug.WriteLine("Score " & i & ": " & scores(i))
Next i
End Sub
Call studentScores("Anne", "10", "26", "32", "15", "22", "24", "16")
Call studentScores("Mary", "High", "Low", "Average", "High")
Dim JohnScores() As String = {"35", "Absent", "21", "30"}
Call studentScores("John", JohnScores)