반응형
델리게이트(delegate) 목록에 실행할 함수들을 등록해 놓으면, 등록된 함수들을 연쇄적으로 대신 실행시켜준다!
1. 델리게이트(delegate)에 함수를 등록하면 그 함수들의 포인터(주소)들이 등록된다.
2. 델리게이트(delegate)가 실행될 땐 등록된 함수들을 전부 실행시켜주는데, 이 때 등록된 주소들을 참조하여 함수들을 차례로, 연쇄적으로 실행시킨다.
1. 선언 및 정의
deleagte float Calculate(float a, float b); Calculate onCalculate;
• Calculate 이라는 이름의 delegate형, 리턴타입 float, 매개 변수 float 2개인 함수만 등록 가능하도록 제한한 상태.
• Calculate 형인 델리게이트 onCalculate 를 정의.
onCalculate에 대행할 함수들을 등록할 수 있다. 단, 리턴 타입이 float이고, 매개 변수가 float 2개인 함수만 등록 가능!
2. 예시
using System.Collections; using System.Collections.Generic; using UnityEngine; public class Caculator : MonoBehaviour { // Calculate 라는 이름의 delegate 형을 선언 delegate float Calculate(float a, float b); // Calculate 형인 델리게이트 onCalculate를 정의 Calculate onCalculate; void Start() { // 함수 등록 onCalculate = Sum; onCalculate += Subtract; onCalculate -= Subtract; onCalculate += Multiply; } public float Sum(float a, float b) { Debug.Log(a + b); return a + b; } public float Subtract(float a, float b) { Debug.Log(a - b); return a - b; } public float Multiply(float a, float b) { Debug.Log(a * b); return a * b; } void Update() { if (Input.GetKeyDown(KeyCode.Space)) { Debug.Log("결과값: " + onCalculate(1, 10)); } } }
• 델리게이트 형 선언: delegate float Calculate(float a, float b);
• 델리게이트 정의: Calculate onCalculate;
3. 함수 등록/실행하기
2. 글 예시로 설명하겠다.
[함수 등록]
함수의 포인터를 등록해주어야 하기 때문에 함수의 이름을 +,- 연산으로 추가/삭제를 해준다.
void Start() { onCalculate = Sum; onCalculate += Subtract; onCalculate -= Subreact; onCalculate += Multiply; }
실행결과:
• Sum과 Multiply가 연쇄적으로 실행된다. 다시 말해, onCalculate가 Sum(1, 10)와 Multiply(1, 10)을 대행해준다!
[함수 실행]
• 스페이스 키를 누를 때마다 다음과 같이 출력Debug.Log("결과값: " + onCalculate(1, 10));
10
11
• Debug.Log 출력으로 11과 10을 볼 수 있지만, 최종 반환값은 10이다. 멀티캐스트 델리게이트의 특성!
• 만약 모든 함수의 결과를 사용하고 싶다면, 델리게이트(delegate) 대신 이벤트(event)를 사용하거나, 반환값을 저장하는 별도의 로직을 구현해야 한다!
반응형
'Programming Languages > C# 고급문법' 카테고리의 다른 글
[C# 고급문법] 비동기 프로그래밍 (async, await, Task 클래스) (0) | 2024.09.13 |
---|---|
[C# 고급문법] LINQ (데이터 쿼리) (0) | 2024.09.12 |
[C# 고급문법] 제네릭 (Generic) (0) | 2024.09.10 |