공부/C#
[C#] 이벤트 액션 델리게이트 event action delegate
굴러다니다니
2025. 6. 16. 10:33
1. 일반
void Add(int x, int y)
{
int result = x + y;
print($"x + y = {result}");
}
void Sub(int x, int y)
{
int result = x - y;
print($"x - y = {result}");
}
void Mul(int x, int y)
{
int result = x * y;
print($"x * y = {result}");
}
void Div(int x, int y)
{
int result = x / y;
print($"x / y = {result}");
}
Add, Sub, Mul, Div 함수를 따로 만들어줬다
이를 사용하기 위해서
Add(10, 20);
Sub(10, 20);
Mul(10, 20);
Div(10, 20);
이런식으로 사용할 것이다
2. 델리게이트 사용 delegate
delegate void BasicOp(int x, int y); //델리게이트 선언
BasicOp basicOp; //델리게이트 객체 선언
위와 같이 선언을 미리 해주고
basicOp = Add;
basicOp(10, 20);
basicOp = Sub;
basicOp(10, 20);
basicOp = Mul;
basicOp(10, 20);
basicOp = Div;
basicOp(10, 20);
이렇게 새로 할당해주며 사용이 가능하거나
basicOp += Add;
basicOp += Sub;
basicOp += Mul;
basicOp += Div;
basicOp(10, 20);
이런식으로 합쳐서 한번에 사용이 가능하다
3. Action : 반환 타입이 없는 델리게이트
Action<int, int> opAction;
선언
opAction = Add;
opAction(10, 20);
opAction = Sub; //Add끊고 Sub연결
opAction(10, 20);
opAction += Add;
opAction += Sub; //추가 등록
마찬가지로 똑같이 사용 가능하다
opAction += delegate (int x, int y) { print($"x + y = {x + y}"); };
opAction += delegate (int x, int y) { print($"x * y = {x * y}"); };
4. Func: 반환 타입이 있는 델리게이트
Func<int, int, int> opFunc;
매개변수 두개랑 return type까지 추가로 써줘야 된다
int AddFunc(int x, int y)
{
int result = x + y;
return result;
}
int SubFunc(int x, int y)
{
int result = x - y;
return result;
}
int MulFunc(int x, int y)
{
int result = x * y;
return result;
}
int DivFunc(int x, int y)
{
int result = x / y;
return result;
}
return 형이 있는 함수들을 다시 만들어줬다
opFunc = AddFunc;
print(opFunc(10, 20));
마찬가지로 사용이 가능하다
** 추가
opAction += delegate (int x, int y) { print($"x + y = {x + y}"); };
opAction += delegate (int x, int y) { print($"x * y = {x * y}"); };
함수 선언을 하지 않아도 바로 연결이 가능하고,
opAction += (int x, int y) => { print(x+y); };
더 간단하게 람다식으로도 표현이 가능하다
Unity event 등록
ex) 좀비의 onDeath라는 이벤트에 등록하는 형식
Zombie의 부모 스크립트인 LivingEntity에 선언해둔 Event onDeath
좀비가 죽으면 사망한 좀비 리스트에서 제거하게 등록한다 + 2가지 더
여러개를 등록해두고 바로 실행하지 않고, 원할때 실행할 수 있다
익명 메소드는 간단한 동작 묶는데에 유용
복잡할수록 안좋음
living entity에서 Die 함수에 onDeath를 실행하는데, 이때 등록되어있던 이벤트가 그때 실행된다.
1. event 변수 선언 -> 이벤트 실행할 곳
2. 연결? -> 아무곳이나 가능
3. 실행 -> 이벤트 선언했던, 실행하고싶었던 곳에서 함수로 실행
728x90
반응형