Delegate 문
대리자를 선언하는 데 사용됩니다. 대리자는 형식의 Shared
메서드 또는 개체의 인스턴스 메서드를 참조하는 참조 형식입니다. 매개 변수 및 반환 형식이 일치하는 프로시저는 이 대리자 클래스의 인스턴스를 만드는 데 사용할 수 있습니다. 그런 다음 나중에 대리자 인스턴스를 통해 프로시저를 호출할 수 있습니다.
구문
[ <attrlist> ] [ accessmodifier ] _
[ Shadows ] Delegate [ Sub | Function ] name [( Of typeparamlist )] [([ parameterlist ])] [ As type ]
부분
용어 | 정의 |
---|---|
attrlist |
선택 사항. 이 대리자에 적용되는 특성 목록입니다. 여러 특성은 쉼표로 구분합니다. 특성 목록을 꺾쇠괄호(“< ” 및 “> ”)로 묶어야 합니다. |
accessmodifier |
선택 사항. 대리자에 액세스할 수 있는 코드를 지정합니다. 다음 중 하나일 수 있습니다. - Public. 대리자를 선언하는 요소에 액세스할 수 있는 모든 코드에서 액세스할 수 있습니다. - Protected. 대리자의 클래스 또는 파생 클래스 내의 코드만 액세스할 수 있습니다. - Friend. 동일한 어셈블리 내의 코드만 대리자를 액세스할 수 있습니다. - 프라이빗. 대리자를 선언하는 요소 내의 코드만 액세스할 수 있습니다. - Protected Friend 대리자의 클래스 내 코드, 파생 클래스 또는 동일한 어셈블리만 대리자를 액세스할 수 있습니다. - Private Protected 대리자의 클래스 내 코드 또는 동일한 어셈블리의 파생 클래스 내 코드만 대리자를 액세스할 수 있습니다. |
Shadows |
선택 사항. 이 대리자가 기본 클래스의 이름이 같은 프로그래밍 요소 또는 오버로드된 요소 집합을 다시 선언하고 숨김을 나타냅니다. 모든 종류의 선언된 요소를 다른 종류로 섀도잉할 수 있습니다. 섀도잉된 요소는 섀도잉 요소에 액세스할 수 없는 위치를 제외하고 해당 요소를 섀도잉하는 파생 클래스 내에서 사용할 수 없습니다. 예를 들어 Private 요소가 기본 클래스 요소를 섀도잉하는 경우 Private 요소에 액세스할 수 있는 권한이 없는 코드는 기본 클래스 요소에 대신 액세스합니다. |
Sub |
선택 사항이지만 Sub 또는 Function 이 나타나야 합니다. 이 프로시저를 값을 반환하지 않는 대리자 Sub 프로시저로 선언합니다. |
Function |
선택 사항이지만 Sub 또는 Function 이 나타나야 합니다. 이 프로시저를 값을 반환하는 대리자 Function 프로시저로 선언합니다. |
name |
필수입니다. 대리자 형식의 이름입니다. 표준 변수 명명 규칙을 따릅니다. |
typeparamlist |
선택 사항. 이 대리자의 형식 매개 변수 목록입니다. 여러 형식 매개 변수는 쉼표로 구분합니다. 선택적으로 각 형식 매개 변수는 In 및 Out 제네릭 한정자를 사용하여 변형으로 선언될 수 있습니다. 형식 목록을 괄호로 묶고 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
참고 항목
.NET