다음을 통해 공유


Delegate 문

대리자를 선언하는 데 사용됩니다. 대리자는 형식의 메서드 또는 개체의 인스턴스 메서드를 참조 Shared 하는 참조 형식입니다. 매개 변수 및 반환 형식이 일치하는 모든 프로시저를 사용하여 이 대리자 클래스의 인스턴스를 만들 수 있습니다. 그런 다음 나중에 대리자 인스턴스를 통해 프로시저를 호출할 수 있습니다.

문법

[ <attrlist> ] [ accessmodifier ] _  
[ Shadows ] Delegate [ Sub | Function ] name [( Of typeparamlist )] [([ parameterlist ])] [ As type ]  

부분

기간 정의
attrlist 선택 사항입니다. 이 대리자에게 적용되는 특성 목록입니다. 여러 특성은 쉼표로 구분됩니다. 특성 목록을 꺾쇠 괄호("" 및 "<>")로 묶어야 합니다.
accessmodifier 선택 사항입니다. 대리자가 액세스할 수 있는 코드를 지정합니다. 다음 중 하나일 수 있습니다.

- 공용. 대리자를 선언하는 요소에 액세스할 수 있는 모든 코드는 해당 요소에 액세스할 수 있습니다.
- 보호됩니다. 대리자의 클래스 또는 파생 클래스 내의 코드만 액세스할 수 있습니다.
- 친구. 동일한 어셈블리 내의 코드만 대리자에 액세스할 수 있습니다.
- 비공개입니다. 대리자를 선언하는 요소 내의 코드만 해당 요소에 액세스할 수 있습니다.

- 보호된 친구 대리자의 클래스, 파생 클래스 또는 동일한 어셈블리 내의 코드만 대리자에 액세스할 수 있습니다.
- 프라이빗 보호됨 대리자의 클래스 내 또는 동일한 어셈블리의 파생 클래스에 있는 코드만 대리자에 액세스할 수 있습니다.
Shadows 선택 사항입니다. 이 대리자는 동일한 이름의 프로그래밍 요소 또는 오버로드된 요소 집합을 기본 클래스에서 다시 선언하고 숨깁니다. 선언된 모든 종류의 요소를 다른 종류로 숨기면 됩니다.

그림자 요소에 액세스할 수 없는 경우를 제외하고 그림자 요소를 숨기는 파생 클래스 내에서는 그림자 요소를 사용할 수 없습니다. 예를 들어 요소가 기본 클래스 요소를 숨기면 Private 요소에 액세스할 Private 수 있는 권한이 없는 코드가 대신 기본 클래스 요소에 액세스합니다.
Sub 선택 사항이지만 Sub 표시하거나 Function 표시해야 합니다. 이 프로시저를 값을 반환하지 않는 대리 Sub 자 프로시저로 선언합니다.
Function 선택 사항이지만 Sub 표시하거나 Function 표시해야 합니다. 이 프로시저를 값을 반환하는 대리 Function 자 프로시저로 선언합니다.
name 필수 사항입니다. 대리자 형식의 이름입니다. 는 표준 변수 명명 규칙을 따릅니다.
typeparamlist 선택 사항입니다. 이 대리자의 형식 매개 변수 목록입니다. 여러 형식 매개 변수는 쉼표로 구분됩니다. 필요에 따라 각 형식 매개 변수는 사용 및 Out 제네릭 한정자를 사용하여 In 변형으로 선언할 수 있습니다. 형식 목록을 괄호로 묶고 키워드로 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

참고하십시오