공부/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
반응형