Delegate 문
업데이트: 2007년 11월
대리자를 선언하는 데 사용합니다. 대리자는 형식의 Shared 메서드 또는 개체의 인스턴스 메서드를 참조하는 참조 형식입니다. 이 대리자 클래스의 인스턴스를 만들기 위해 매개 변수 및 반환 형식이 일치하는 모든 프로시저를 사용할 수 있습니다. 이러한 프로시저는 대리자 인스턴스를 통해 나중에 호출될 수 있습니다.
[ <attrlist> ] [ accessmodifier ] _
[ Shadows ] Delegate [ Sub | Function ] name [( Of typeparamlist )] [([ parameterlist ])] [ As type ]
구성 요소
attrlist
선택적 요소. 이 대리자에 적용되는 특성의 목록으로, 특성이 여러 개 있으면 쉼표로 구분됩니다. 특성 목록은 꺾쇠괄호("<" 및 ">")로 묶어야 합니다.accessmodifier
선택적 요소. 대리자에 액세스할 수 있는 코드를 지정하며, 다음 중 하나일 수 있습니다.Public. 대리자를 선언하는 요소에 액세스할 수 있는 모든 코드에서 액세스할 수 있습니다.
Protected. 대리자의 클래스나 파생 클래스 안에 있는 코드에서만 액세스할 수 있습니다.
Friend. 같은 어셈블리 안에 있는 코드에서만 대리자에 액세스할 수 있습니다.
Private. 대리자를 선언하는 요소 안에 있는 코드에서만 액세스할 수 있습니다.
Protected Friend를 지정하면 대리자의 클래스, 파생 클래스 또는 같은 어셈블리에 있는 코드에서 액세스할 수 있습니다.
Shadows
선택적 요소. 이 대리자는 기본 클래스에서 같은 이름의 프로그래밍 요소나 오버로드된 요소 집합을 다시 선언하고 숨기도록 지정합니다. 다른 요소를 사용하여 선언된 모든 요소를 숨길 수 있습니다.숨겨진 요소는 해당 요소를 숨기는 파생 클래스에서 사용할 수 없지만 숨기는 요소를 액세스할 수 없는 클래스에서는 사용할 수 있습니다. 예를 들어, Private 요소가 기본 클래스 요소를 숨기면 Private 요소에 대한 액세스 권한이 없는 코드에서는 기본 클래스 요소에 대신 액세스합니다.
Sub
선택적 요소. Sub나 Function 중 하나가 반드시 있어야 합니다. 값을 반환하지 않는 대리자 Sub 프로시저로 이 프로시저를 선언합니다.Function
선택적 요소. Sub나 Function 중 하나가 반드시 있어야 합니다. 값을 반환하는 대리자 Function 프로시저로 이 프로시저를 선언합니다.name
필수적 요소. 대리자 형식의 이름이며, 표준 변수 명명 규칙을 따릅니다.typeparamlist
선택적 요소. 이 대리자에 대한 형식 매개 변수 목록입니다. 형식 매개 변수가 여러 개 있으면 쉼표로 구분합니다. 형식 목록은 괄호로 묶어야 하며 Of 키워드를 사용하여 정의해야 합니다.parameterlist
선택적 요소. 프로시저를 호출할 때 프로시저에 전달하는 매개 변수 목록입니다. 매개 변수 목록은 괄호로 묶어야 합니다.type
Function 프로시저를 지정하는 경우 필수적 요소입니다. 반환 값의 데이터 형식입니다.
설명
Delegate 문은 대리자 클래스의 매개 변수와 반환 형식을 정의합니다. 이 대리자 클래스의 인스턴스를 만들기 위해 매개 변수 및 반환 형식이 일치하는 모든 프로시저를 사용할 수 있습니다. 이러한 프로시저는 대리자의 Invoke 메서드를 호출하여 대리자 인스턴스를 통해 나중에 호출될 수 있습니다.
대리자는 네임스페이스, 모듈, 클래스 또는 구조체 수준에서 선언할 수 있고 프로시저 내에서는 선언할 수 없습니다.
각 대리자 클래스는 개체 메서드의 사양이 전달되는 생성자를 정의합니다. 대리자 생성자의 인수는 메서드에 대한 참조이거나 람다 식이어야 합니다.
메서드에 대한 참조를 지정하려면 다음 구문을 사용합니다.
AddressOf [expression.]methodname
expression의 컴파일 타임 형식은 지정된 이름의 시그니처가 대리자 클래스의 시그니처와 일치하는 메서드가 포함된 클래스 또는 인터페이스의 이름이어야 합니다. methodname은 공유 메서드 또는 인스턴스 메서드가 될 수 있습니다. methodname은 클래스의 기본 메서드에 대한 대리자를 만드는 경우에도 반드시 지정해야 합니다.
람다 식을 지정하려면 다음 구문을 사용합니다.
Function ([parm As type, parm2 As type2, ...]) expression
함수의 시그니처는 대리자 형식의 시그니처와 일치해야 합니다. 람다 식에 대한 자세한 내용은 람다 식을 참조하십시오.
예제
다음 예제에서는 Delegate 문을 사용하여 두 수에 대한 연산을 수행하고 하나의 숫자를 반환하는 대리자를 선언합니다. DelegateTest 메서드는 이 형식의 대리자 인스턴스를 사용하고 이를 통해 숫자 쌍에 대한 연산을 수행합니다.
Delegate Function MathOperator( _
ByVal x As Double, _
ByVal y As Double _
) As Double
Function AddNumbers( _
ByVal x As Double, _
ByVal y As Double _
) As Double
Return x + y
End Function
Function SubtractNumbers( _
ByVal x As Double, _
ByVal y As Double _
) As Double
Return x - y
End Function
Sub DelegateTest( _
ByVal x As Double, _
ByVal op As MathOperator, _
ByVal y As Double _
)
Dim ret As Double
ret = op.Invoke(x, y) ' Call the method.
MsgBox(ret)
End Sub
Protected Sub Test()
DelegateTest(5, AddressOf AddNumbers, 3)
DelegateTest(9, AddressOf SubtractNumbers, 3)
End Sub