.NET프로그래밍/C# 3.5 SP1

53. 대리자(Delegate)

holland14 2009. 8. 13. 17:31


==> 대리자.cs


using System;

public class 대리자
{
    //[!] 대리자 선언
    public delegate void GoHome(); // 매개변수가 없는 대리자
    public delegate void Gop(int a); // 매개변수가 있는 대리자
    public delegate int Hap(int a, int b); // 반환값이 있는 대리자
    public static void Main()
    {
        //[1] 다중 메서드 호출
        Car car = new Car();
       
        car.Run();
        car.Left();
        car.Right();

        //[2] 대리자를 통해서 대신 호출
        GoHome go; //[a] 대리자형 변수(개체) 선언
        go = new GoHome(car.Run); //[b] 메서드 등록
        go += new GoHome(car.Left); // Add(=car.Left 추가)
        go += new GoHome(car.Right);
        go -= new GoHome(car.Left); // Remove(=car.Left 삭제)
        go(); //[c] 대신 호출

        //[3] 매개변수가 있는 메서드 대신 호출
        Gop gop = new Gop(car.Test);
        gop(2);
        gop(4);

        //[4] 반환값 테스트
        Hap hap = new Hap(car.Sum);
        Console.WriteLine(hap(3, 5));
    }
}



/*

대리자는 클래스 밖에 선언할 수도 있다.

*/



==============================================================================================



==> Car.cs



using System;

public class Car
{
    public void Run()
    {
        Console.WriteLine("전진");
    }
    public void Left()
    {
        Console.WriteLine("좌회전");
    }
    public void Right()
    {
        Console.WriteLine("우회전");
    }

    // 매개변수가 있는 메서드
    public void Test(int a)
    {
        Console.WriteLine((a * a));
    }

    // 반환값이 있는 메서드
    public int Sum(int a, int b)
    {
        return (a + b);
    }

}