delegate

특징:

델리게이트는 사전적 의미로 "대리자"로 메소드를 참조하는 변수이다.

C++에서 함수 포인터와 비슷한 기능으로 사용되며, 기능이 더 다양하다.

.Net Framework에서 event 처리에 많이 사용된다.

delegate의 signature는 호출할 메쏘드의 시그너쳐가 일치해야 한다.

클래스 내부에 선언 할 때는 접근자를 붙인다.

using System; 

delegate void FoodDelegate(string s);  // 1. 델리게이트 선언

class MainApp{
    public static void Good(string s)
    {
        Console.WriteLine("{0} is good.", s);
    }

    public static void Bad(string s)
    {
        Console.WriteLine("{0} is bad.", s);
    }

    public static void Main()
    {
        FoodDelegate food = new FoodDelegate(Good); // 2. 메소드 등록
        food += new FoodDelegate(Bad);

        food("liquor"); // 3. 델리게이트 호출

    }
}

델리게이트를 사용 할려면 델리게이트 선언, 메소드 등록, 델리게이트 호출 3단계를 거친다.

1. 델리게이트 선언

클래스 내부에서 선언시에는 접근 연산자를 가장 앞에 붙인다. 그 다음 delegate를 선언하고 나머지 뒤에 올 구문은
호출될 메소드의 시그너쳐와 일치하도록 선언한다. (흠... 함수 포인터의 선언과 비슷하구나 !!!)

2. 메소드 등록

메소드 등록은 선언된 델리게이트를 new로 생성시 메드의 이름을 넘긴다.
델리게이트는 합성(+, -) 명령을 사용하여 명령을 조합하는 것이 가능하다.

3. 델리게이 호출

생성한 델리게이트를 기냥 실행하면 된다.

아래 코드는 Food라는 클래스를 통해 delegate를 호출하는 코드로 위의 코드를 Food 클래스로 수정 한것이다..

.

 콜백 메서드로 사용할때는 다음과 같습니다.


    delegate int CalcDelegate(int a, int b);

    class Calc
    {
        public void Run(int a, int b, CalcDelegate dele)
        {
            Console.WriteLine(dele(a, b));
        }

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

        public void Test()
        {

            Run(10, 20, Plus);
            Run(10, 20, Minus);
        }
    }



참조)

http://mrw0119.tistory.com/19