본문 바로가기

C# 문법

[C#] Delegate

Delegate란?

  • 델리게이트는 대리자 혹은 c언어에서 쓰이는 포인터와 같은 개념입니다.
  • 즉 대신 일해주는 녀석인데 주로 메소드를 참조(진짜 포인터랑 비슷)하고 있는 영역이라고 말 할 수 있습니다.
  • 주의할 점은 전달할 매소드의 매개변수와 반환 값이 델리게이트와 같아야 합니다.

사용 방법

  • delegate 반환형 델리게이트명(매개변수..);

Delegate 사용 방법

  private delegate int SummaryDelegate(int a, int b);
    private int Sum(int a, int b) => a + b;
    public void Run()
    {
        //Sum이라는 메서드를 sd1이 참조하여 사용 할 수 있습니다.
        SummaryDelegate sd1 = Sum;
        //간단한 메서드 같은경우 아래와 같이 delegate를 선언해서 사용할 수 있습니다. 
        SummaryDelegate sd2 = delegate (int a, int b)
        {
            return a + b;
        };
        Console.WriteLine($"3 +4 = {sd1(3, 4)}");
        Console.WriteLine($"4 +4 = {sd2(4, 4)}");
    }

결과

3 +4 = 7
4 +4 = 8

Delegate Chain

  • Delegate.Combine을 이용해서 형태가 같은 여러가지 Method를 묶을수 있습니다.

XML Deserialization

  private delegate void WriteMessage(string name);
    private void ShowName(string name) => Console.WriteLine($"안녕하세요. 저는 {name}입니다. ");
    private void ShowInfo1(string name) => Console.WriteLine($"{name}은 수원에 살고 있습니다. ");
    private void ShowInfo2(string name) => Console.WriteLine($"{name}의 번호는 010-1234-5554입니다. ");
    public void Run()
    {
        //Delegate.Combine를 이용해 Method를 묶을수 있습니다.
        WriteMessage sd1 = (WriteMessage)Delegate.Combine(new WriteMessage(ShowName), new WriteMessage(ShowInfo1)
            , new WriteMessage(ShowInfo2));
        //한방에 짜잔!
        sd1("Yangbeng");
    }

결과

안녕하세요. 저는 Yangbeng입니다.
Yangbeng은 수원에 살고 있습니다.
Yangbeng의 번호는 010-1234-5554입니다.

이렇게 여러 메소드를 한번에 사용하고 싶을 때 쓸 수 있을 거 같습니다.

참고

C# 강좌