반응형
C# delegate
C/C++ 함수 포인터와 비슷한 개념으로 메서드 파라미터와 리턴 타입에 대한 정의를 한 후,
동일한 파라미터와 리턴 타입을 가진 메서드를 서로 호환해서 불러 쓸 수 있다.
<Example>
class Program
{
delegate int OnClicked();
// delegate -> 형식은 형식인데, 함수 자체를 인자로 넘겨주는 그런 형식
// 반환 : int 입력 : void
// OnClicked 이 delegate 형식의 이름이다.
static void ButtonPressed(OnClicked clickedFunction/* 함수 자체를 인자로 넘겨주고 */)
{
// 함수를 호출();
clickedFunction();
}
static int TestDelegate()
{
Console.WriteLine("Hello Delegate");
return 0;
}
static int TestDelegate2()
{
Console.WriteLine("Hello Delegate");
return 0;
}
static void Main(string[] args)
{
OnClicked clicked = new OnClicked(TestDelegate);
clicked += TestDelegate2;
// delegate ( 대리자 )
ButtonPressed(clicked/**/);
}
}
<Result>
Hello Delegate
Hello Delegate2
OnClicked 라는 delegate 형식을 만들어주면, 그것을 구조체 처럼 사용할 수 있다.
이것을 하나만 정하여 사용하는것이 아니라 + 를 하여 동작을 이어서 진행 할 수 있도록 가능하다.
static void Main(string[] args)
{
OnClicked clicked = new OnClicked(TestDelegate);
clicked += TestDelegate2;
ButtonPressed(clicked);
}
Main 함수 내에서 보다시피 clicked에 하나의 함수만 할당하는 것이 아니라 이어서 진행가능하다.
TestDelegate -> TestDelegate2 이렇게 가능하다.
반응형
'C, C++' 카테고리의 다른 글
[C++] istringstream, ostringstream, stringstream (0) | 2023.04.25 |
---|---|
[C#] ThreadPool 클래스 (0) | 2022.07.04 |
[C/C++]explicit (0) | 2021.12.01 |
[C/C++]스마트 포인터(smart pointer) (0) | 2021.11.22 |
[C/C++] accumulate 사용법과 주의사항 (0) | 2021.07.09 |