Esempio n. 1
0
        delegate int MyDelegate(int a, int b);  // delegate는 Type이다. (int, float 처럼)

        static void Main(string[] args)
        {
            int Plus(int a, int b)
            {
                return(a + b);
            }

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

            // 2. 델리게이트 참조변수 생성
            MyDelegate Callback;  // Callback : MyDelegate의 델리게이트 인스턴스

            // 3. 델리게이트의 인스턴스를 생성, 이때 델리게이트가 참조할 메소드를 매개변수로 넘긴다.
            Callback = new MyDelegate(Plus);  // 메소드를 인자로 갖는 타입의 인스턴스 생성

            // 4. 델리게이트를 호출한다.
            Console.WriteLine(Callback(3, 5));  // Plus(3, 5)

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


            Calcultor  calc = new Calcultor();
            MyDelegate calcDelegate;                  // 1. 델리게이트 참조변수 생성

            calcDelegate = new MyDelegate(calc.Plus); // 2. 델리게이트 인스턴스 생성(메소드 참조)
            Console.WriteLine(calcDelegate(3, 5));    // 3. 델리게이트 사용

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

            // 델리게이트 인스턴스를 생성할 때 생성자를 사용하지 않고, 참조할 메소드명을 이용할 수 있다.
            calcDelegate  = calc.Plus;
            calcDelegate += Calcultor.Minus;  // + 연산자로 델리게이트를 연결할 수 있다.
            calcDelegate(1, 2);
        }
Esempio n. 2
0
        static void Main(string[] args)
        {
            int Plus(int a, int b)
            {
                return(a + b);
            }

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

            // 2. 델리게이트 참조변수 생성
            MyDelegateType myDelegate;

            // 3. 델리게이트의 인스턴스 생성, 이때 참조할 메소드를 설정한다.
            myDelegate = new MyDelegateType(Plus);
            // 4. 델리게이트 실행
            Console.WriteLine(myDelegate(3, 4));  // 7

            myDelegate = Subtract;
            Console.WriteLine(myDelegate(3, 4));

            Calcultor      calc = new Calcultor();
            MyDelegateType calcDelegate;

            calcDelegate = new MyDelegateType(calc.Plus);
            Console.WriteLine(calcDelegate(5, 10));

            calcDelegate = new MyDelegateType(Calcultor.Subtract);
            Console.WriteLine(calcDelegate(5, 10));

            // 델리게이트는 인스턴스를 생성할 때 생성자 대신 메소드명을 이용할 수 있다.
            calcDelegate  = calc.Plus;
            calcDelegate += Calcultor.Subtract;  // 메소드를 2개 이상 연결할 수 있다.
            calcDelegate(1, 2);
        }