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); }
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); }