코드를 작성할 때 직관적이고 순차적으로 작성을 한다.
하지만 상대방에게 요청을 보내야 하는 상황이 올 수도 있다. (이때 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; //추가
'C#' 카테고리의 다른 글
C#) property (0) | 2022.01.13 |
---|---|
C#) interface 인터페이스 (1) | 2022.01.13 |
C#) Generic 일반화 (0) | 2022.01.13 |
C#) var & dynamic & object (0) | 2022.01.13 |