Blog Content

    티스토리 뷰

    50.C# - Delegate 대리자 (델리게이트)

    반응형
    한 번의 호출로 하나 이상의 메서드를 대신해서 호출 하는 개념을 가지고 있어
    델리게이트는 객체 지향적으로 클래스 안에 있는 메소드를 가리킬 수 있습니다.
    직접적이
    아닌 간접적으로 대신 호출해서 사용 할 수 있습니다.
    (여러개를 처리 할 때 사용)


     delegate.cs
    using System;

    public class 대리자
    {
        //[!] 대리자 선언
        public delegate void GoHome(); //매개변수가 없는 대리자 생성

        //예제2
        public delegate void Gop(int a); //매개변수가 있는 대리자 생성

        //예제3
        public delegate int Hap(int a, int b); //반환값이 있는 대리자

        public static void Main(string[] args)
        {
            //[1] 다중 메서드 호출
            Car car = new Car();
            car.Run();        car.Left();        car.Right();

            //[2]대리자를 통해서 대신 호출
            GoHome go; //대리자형 변수(개체) 선언
           
            //[b]메서드 등록 (그릇에 내용을 넣는다.)
            go = new GoHome(car.Run);//Add
            go += new GoHome(car.Left);
            go += new GoHome(car.Right); //Add했지만 아래 -를 만나서~
            go -= new GoHome(car.Right); //Remove 가능
            go(); //[c]대신 호출

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

            //예제3 - 반환값 테스트
            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("우회전"); }

        //예제2
        public void Test(int a) { Console.WriteLine((a*a)); }

        //예제3 리턴값(반환값)이 있는 매서드 생성
        public int Sum(int a, int b) { return (a + b); }
    }

    결과값


    50.Delegate.zip
    다운로드

    반응형

    Comments