Visual Basic에서는 ParamArray 매개변수를 사용하여 프로시저 또는 함수에 가변적인 수의 인수를 전달할 수 있습니다. 이는 동일한 유형의 고정되지 않은 매개변수 개수를 가진 메소드를 생성하는 편리한 방법입니다.
Sub ShowNumbers(ParamArray numbers() As Integer) For Each n As Integer In numbers Console.WriteLine(n) Next End Sub ' 호출: ShowNumbers(1, 2, 3, 4) ShowNumbers() ' 인수 없이 호출 가능
ParamArray는 하나뿐이며 반드시 목록의 마지막에 있어야 합니다.ParamArray 유형의 인수는 항상 배열로 전달되며 ByRef로 될 수 없습니다.ParamArray는 하나의 프로시저가 동일한 유형의 다양한 수의 매개변수를 수용할 수 있게 해주지만, 오버로딩은 서로 다른 서명을 가진 여러 메소드를 만듭니다.
오버로딩 예시:
Sub Add(a As Integer, b As Integer) ' ... End Sub Sub Add(a As Integer, b As Integer, c As Integer) ' ... End Sub
사용 시점:
ParamArray: 동일한 유형의 매개변수가 많을 때.질문: 프로시저가 동시에 ParamArray와 다른 매개변수를 가질 수 있을까요? 그 순서에 대한 제약 사항은 무엇인가요?
답변: 네, 가능하지만 ParamArray는 반드시 마지막 매개변수여야 하며 함수 서명에 하나만 있어야 합니다.
잘못된 사용 예시:
Sub Test(ParamArray x() As Integer, y As String) ' 컴파일 오류 End Sub
올바른 예시:
Sub Test(y As String, ParamArray x() As Integer) ' 올바름 End Sub
이야기
다양한 출처에서 데이터를 수집하는 함수에 ParamArray를 사용했지만, 여러 경우에 배열을 수동으로 전달했습니다. 개발자는 배열 전달이 중첩 배열(배열의 배열)을 초래한다는 사실을 눈치채지 못해 결과적으로 항상 데이터 처리가 잘못되어 보고서 데이터가 손상되었습니다.
이야기
SQL 쿼리를 보편적으로 구축하기 위해 String 매개변수에 ParamArray를 사용했지만, 메소드를 업데이트할 때 ParamArray 뒤에 필수 매개변수를 추가했습니다. 전체 시스템이 컴파일되지 않았습니다.
이야기
서로 다른 매개변수 집합을 가진 메소드 오버로딩을 위해 ParamArray와 오버로딩을 함께 사용했습니다. 이로 인해 모호성이 발생했습니다: 컴파일러가 어떤 호출 방식을 사용할지 결정하지 못했기 때문에 ParamArray가 여러 오버로딩에 동시에 적합했습니다.