다이내믹 델리게이트는 serialize 가능하며, 그 함수를 이름으로 찾을 수도 있으나, 일반 델리게이트보다는 느립니다.
다이내믹 델리게이트 선언하기
다이내믹 델리게이트의 선언은, 다이내믹 델리게이트 전용 변종 매크로를 사용한다는 점만 빼고는 표준 델리게이트 선언 시와 같은 방법으로 선언합니다.
| 선언 매크로 | 설명 |
|---|---|
DECLARE_DYNAMIC_DELEGATE[_RetVal, ...]\( DelegateName \) |
다이내믹 델리게이트를 생성합니다. |
DECLARE_DYNAMIC_MULTICAST_DELEGATE[_RetVal, ...]\( DelegateName \) |
다이내믹 멀티-캐스트 델리게이트를 생성합니다. |
다이내믹 델리게이트 바인딩
| 헬퍼 매크로 | 설명 |
|---|---|
BindDynamic( UserObject, FuncName ) |
다이내믹 델리게이트에서 BindDynamic() 호출을 위한 헬퍼 매크로입니다. 함수 이름 문자열을 자동 생성합니다. |
AddDynamic( UserObject, FuncName ) |
다이내믹 멀티-캐스트 델리게이트에서 AddDynamic() 호출을 위한 헬퍼 매크로입니다. 함수 이름 문자열을 자동 생성합니다. |
RemoveDynamic( UserObject, FuncName ) |
다이내믹 멀티-캐스트 델리게이트에서 RemoveDynamic() 호출을 위한 헬퍼 매크로입니다. 함수 이름 문자열을 자동 생성합니다. |
다이내믹 델리게이트 실행하기
델리게이트에 바인딩된 함수는 델리게이트의 Execute() 함수를 호출하여 실행됩니다. 델리게이트를 실행하기 전 "바인딩" 되었는지 반드시 확인해야 합니다. 이는 코드 안전성을 도모하기 위함인데,
초기화되지 않은 상태로 접근이 가능한 반환값과 출력 파라미터가 델리게이트에 있을 수 있기 때문입니다. 바인딩되지 않은 델리게이트를 실행시키면 일부 인스턴스에서 메모리에 낙서를 해버릴 수가 있습니다.
델리게이트가 실행해도 안전한 지는 IsBound() 를 호출하여 검사해 볼 수 있습니다. 또한 반환값이 없는 델리게이트에 대해서는 ExecuteIfBound() 를 호출할 수 있으나,
출력 파라미터는 초기화되지 않을 수 있다는 점 주의하시기 바랍니다.
| 실행 함수 | 설명 |
|---|---|
Execute() |
|
ExecuteIfBound() |
|
IsBound() |
멀티-캐스트 델리게이트 관련 자세한 내용은 멀티캐스트 델리게이트 페이지를 확인하시기 바랍니다.