위치 및 이름으로 인수 전달(Visual Basic)Passing Arguments by Position and by Name (Visual Basic)

또는 프로시저를 호출 하는 경우 Sub Function 프로시저 정의에 표시 되는 순서 대로 위치를 기준으로 인수를 전달 하거나 위치에 관계 없이 이름을사용 하 여 인수를 전달할 수 있습니다.When you call a Sub or Function procedure, you can pass arguments by position — in the order in which they appear in the procedure's definition — or you can pass them by name, without regard to position.

이름으로 인수를 전달 하는 경우 인수의 선언 된 이름, 콜론 및 등호 ( := ), 인수 값을 차례로 지정 합니다.When you pass an argument by name, you specify the argument's declared name followed by a colon and an equal sign (:=), followed by the argument value. 순서에 관계 없이 명명 된 인수를 제공할 수 있습니다.You can supply named arguments in any order.

예를 들어 다음 Sub 절차에서는 세 가지 인수를 사용 합니다.For example, the following Sub procedure takes three arguments:

Public Class StudentInfo
    Shared Sub Display(name As String,
                Optional age As Short = 0,
                Optional birth As Date = #1/1/2000#)

        Console.WriteLine($"Name = {name}; age = {age}; birth date = {birth:d}")
    End Sub
End Class

이 프로시저를 호출 하는 경우 인수를 이름으로 지정 하거나 둘의 조합을 사용 하 여 지정할 수 있습니다.When you call this procedure, you can supply the arguments by position, by name, or by using a mixture of both.

위치로 인수 전달Passing Arguments by Position

Display다음 예제와 같이 위치에 의해 전달 되 고 쉼표로 구분 된 인수를 사용 하 여 메서드를 호출할 수 있습니다.You can call the Display method with its arguments passed by position and delimited by commas, as shown in the following example:

StudentInfo.Display("Mary", 19, #9/21/1998#)

위치 인수 목록에서 선택적 인수를 생략 하는 경우에는 쉼표를 사용 하 여 위치를 유지 해야 합니다.If you omit an optional argument in a positional argument list, you must hold its place with a comma. 다음 예제에서는 Display 인수를 사용 하지 않고 메서드를 호출 합니다 age .The following example calls the Display method without the age argument:

StudentInfo.Display("Mary",, #9/21/1998#)

이름으로 인수 전달Passing Arguments by Name

또는 Display 다음 예제와 같이 쉼표로 구분 된 이름으로 전달 된 인수를 사용 하 여를 호출할 수 있습니다.Alternatively, you can call Display with the arguments passed by name, also delimited by commas, as shown in the following example:

StudentInfo.Display(age:=19, birth:=#9/21/1998#, name:="Mary")

이러한 방법으로 인수를 전달 하는 것은 둘 이상의 선택적 인수가 있는 프로시저를 호출할 때 특히 유용 합니다.Passing arguments by name in this way is especially useful when you call a procedure that has more than one optional argument. 이름으로 인수를 제공 하는 경우 연속 쉼표를 사용 하 여 누락 된 위치 인수를 나타낼 필요가 없습니다.If you supply arguments by name, you do not have to use consecutive commas to denote missing positional arguments. 인수를 이름으로 전달 하면 전달 하는 인수와 생략 한 인수를 쉽게 추적할 수 있습니다.Passing arguments by name also makes it easier to keep track of which arguments you are passing and which ones you are omitting.

위치 및 이름으로 인수 혼합Mixing Arguments by Position and by Name

다음 예제와 같이 단일 프로시저 호출에서 위치 및 이름으로 인수를 제공할 수 있습니다.You can supply arguments both by position and by name in a single procedure call, as shown in the following example:

StudentInfo.Display("Mary", birth:=#9/21/1998#)

앞의 예제에서 age birth 는 이름으로 전달 되기 때문에 생략 된 인수의 자리를 유지 하기 위해 추가 쉼표가 필요 하지 않습니다.In the preceding example, no extra comma is necessary to hold the place of the omitted age argument, since birth is passed by name.

15.5 이전의 Visual Basic 버전에서는 위치와 이름을 혼합 하 여 인수를 제공 하면 모두 위치 인수가 먼저와 야 합니다.In versions of Visual Basic before 15.5, when you supply arguments by a mixture of position and name, the positional arguments must all come first. 이름으로 인수를 제공한 후에는 모든 나머지 인수를 이름으로 전달 해야 합니다.Once you supply an argument by name, any remaining arguments must all be passed by name. 예를 들어, 메서드에 대 한 다음 호출에서 Display 컴파일러 오류 BC30241: 명명 된 인수가 필요합니다.For example, the following call to the Display method displays compiler error BC30241: Named argument expected.

StudentInfo.Display("Mary", age:=19, #9/21/1998#)

Visual Basic 15.5부터 끝 위치 인수가 올바른 위치에 있는 경우 위치 인수는 명명 된 인수 뒤에 올 수 있습니다.Starting with Visual Basic 15.5, positional arguments can follow named arguments if the ending positional arguments are in the correct position. Visual Basic 15.5에서 컴파일된 경우 메서드에 대 한 이전 호출이 Display 성공적으로 컴파일되고 더 이상 컴파일러 오류 BC30241생성 되지 않습니다.If compiled under Visual Basic 15.5, the previous call to the Display method compiles successfully and no longer generates compiler error BC30241.

명명 된 인수와 위치 인수를 순서 대로 혼합 하 고 일치 시키는이 기능은 명명 된 인수를 사용 하 여 코드를 보다 읽기 쉽게 만드는 경우에 특히 유용 합니다.This ability to mix and match named and positional arguments in any order is particularly useful when you want to use a named argument to make your code more readable. 예를 들어, 다음 Person 클래스 생성자에는 형식의 인수가 두 개 필요 Person 합니다. 둘 다 일 수 있습니다 Nothing .For example, the following Person class constructor requires two arguments of type Person, both of which can be Nothing.

Public Sub New(name As String, father As Person, mother As Person, dateOfBirth As Date)

명명 된 인수와 위치 인수를 함께 사용 하면 father 및 인수의 값이 인 경우 코드의 의도를 명확 하 게 만들 수 있습니다 mother Nothing .Using mixed named and positional arguments helps to make the intent of the code clear when the value of the father and mother arguments is Nothing:

Dim p = New Person("Mary", father:=Nothing, mother:=Nothing, #9/21/1998#)

명명 된 인수를 사용 하 여 위치 인수를 따르려면 Visual Basic 프로젝트 (.vbproj) 파일에 다음 요소를 추가 해야 합니다 * .To follow positional arguments with named arguments, you must add the following element to your Visual Basic project (*.vbproj) file:

<PropertyGroup>
  <LangVersion>15.5</LangVersion>
</PropertyGroup>

자세한 내용은 Visual Basic 언어 버전 설정을 참조 하세요.For more information see setting the Visual Basic language version.

이름으로 인수를 제공 하는 경우의 제한 사항Restrictions on Supplying Arguments by Name

필요한 인수가 입력 되지 않도록 하려면 인수를 이름으로 전달할 수 없습니다.You cannot pass arguments by name to avoid entering required arguments. 선택적 인수만 생략할 수 있습니다.You can omit only the optional arguments.

매개 변수 배열을 이름으로 전달할 수 없습니다.You cannot pass a parameter array by name. 이는 프로시저를 호출할 때 매개 변수 배열에 대해 쉼표로 구분 된 인수를 무제한으로 제공 하 고, 컴파일러는 단일 이름에 둘 이상의 인수를 연결할 수 없기 때문입니다.This is because when you call the procedure, you supply an indefinite number of comma-separated arguments for the parameter array, and the compiler cannot associate more than one argument with a single name.

참고 항목See also