C#

C#) delegate 대리자

그린티라떼 2022. 1. 14. 01:20

코드를 작성할 때 직관적이고 순차적으로 작성을 한다.

하지만 상대방에게 요청을 보내야 하는 상황이 올 수도 있다. (이때 delegate 사용)

delegate int OnClicked();

static void AnyEvent(OnClicked clickedFunction) //clickedFunction (연락처)
{
    clickedFunction(); //함수 호출 (연락을 달라고)
}

static int Test1()
{
    Console.WriteLine("test1");
    return 0;
}

static int Test2()
{
    Console.WriteLine("test2");
    return 0;
}

static void Main(string[] args)
{
    AnyEvent(Test1);
}

 1. delegate int OnClicked();

  • delegate 형식은 형식인데, 함수 자체를 인자로 넘겨주는 형식이다.
  • 반환 : int, 입력 : void
  • delegate 이름 : Onclicked

2. static void AnyEveny(Onclicked clickedFunction) 

(아래와 같은 상황이 있다고 생각해보자.)

1. 사장님과 연락을 하고 싶어서

2. 비서에게 연락처를 알려주고

3. 연결이 가능하다면 연락을 달라고 한다.

  • 함수 자체를 인자로 넘겨준다.(연락처)
  • clickedFunction(); <-함수 호출 (연락을 달라고 한다.)

3. static int Test1() / static int Test2()

 호출되길 바라는 함수

 

4. AnyEvent(Test1);

 내부적으로 파고 들어가면

OnClicked clicked = new OnClicked(Test1); //(객체 생성)
clicked(); //or AnyEvent(clicked); (호출)

이런 식으로 객체를 생성하면 델리게이트를 체이닝을 할 수 있다.

 

5. delegate chain

하나의 델리게이트 안에 여러 개의 함수를 연결하여 연쇄적으로 호출하는 방식 

clicked -= Test1;  //해제
clicked += Test2;  //추가