델리게이트란?

// 델리게이트 선언 방법
한정자 delegate 반환형식 델리게이트이름 (매개변수목록);

// 델리게이트 사용 예시
int Plus(int a, int b)
{
    return a + b;
}

int Minus(int a, int b)
{
    return a - b;
}

delegate int MyDelegate(int a, int b);
MyDelegate Callback;

Callback = new MyDelegate(Plus);
Console.WriteLine(Callback(3, 4));

Callback = new MyDelegate(Minus);
Console.WriteLine(Callback(7, 5));

델리게이트는 왜, 그리고 언제 사용하나요?

일반화 델리게이트

// 일반화 델리게이트 사용 예시
delegate int Compare<T> (T a, T b);

static int AscendCompare<T> (T a, T b)
{
    return a.CompareTo(b);
}

델리게이트 체인

// 델리게이트 체인 사용 예시
void Call119 (string location)
{
    Console.WriteLine("소방서죠? 불났어요! 주소는 {0}", location);
}
void ShotOut (string location)
{
    Console.WriteLine("피하세요! {0}에 불이 났어요!", location);
}
void Escape (string location)
{
    Console.WriteLine("{0}에서 나갑시다!", location);
}

delegate void ThereIsAFire(string location);

// +를 이용해서 하나의 델리게이트에 여러 메서드를 넣을 수 있다.
ThereIsAFire fire = new ThereIsAFire(Call119);
fire += new ThereIsAFire(ShotOut);
fire += new ThereIsAFire(Escape);

익명 메서드

// 익명 메서드의 선언 방법
델리게이트 인스턴스 = delegate(매개변수목록)
                        {
                            // 실행 코드
                        }

// 익명 메서드 사용 예시
public static void Main()
{
    Calculate Calc;

    Calc = delegate(int a, int b)
            {
                return a + b;
            }

    Console.WriteLine("3 + 4: {0}", Calc(3, 4));
}

이벤트: 객체에 일어난 사건 알리기