반응형

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

+ Recent posts