728x90

delegate(대리자)는 참조형으로 메서드를 대신 호출하는 역할을 한다.

지정자 delegate 리턴타입 이름(인수목록);

delegate int Mydelegate(int a, int b) ;  // delegate 선언

delegate 는 타입이므로 그 자체만으로 메서드를 가리킬 수는 없으며,

인스턴스를 생성한 후 메서드를 가리키도록 초기화해야 한다.

(** 메소드(Method)는 하나의 실행 가능한 코드의 블럭( { } )으로 정의할 수 있으며, 함수라고 부르기도 한다.)

이 delegate 의 입력 파라미터와 반환값의 타입은 서로 같아야 한다.

입력 파라미터로 정수형(int) a, b 를 받아서 그 결과를 정수형(int)로 반환해주는 형태로 delegate를 정의한다.

delegate 만 빼면 메소드와 같다.


// delegate 와 연결할 함수 선언

class Calculator
{
    public int Plus(int a, int b)
    {
        return a + b;
    }

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


    public int Multiply(int a, int b)
    {
        return a * b;
    }

}


Calculator cal = new Calculator(); // 클래스형인 cal 개체 초기화(메모리 할당)

Mydelegate callback;  // delegate 타입의 객체를 생성(인스턴스 참조변수 선언)

// delegate 에 실제 함수를 할당해준다.

callback = new Mydelegate(cal.Plus);  //  delegate에 Plus() 메소드 주소 바인딩
Console.WriteLine(callback(3, 4));  // delegate 수행

Console.WriteLine("원래 함수 이용한 값 더하기 " + cal.Plus(3, 4));


// delegate 인스턴스 참조변수 선언 및 delegate에 정적 메소드인 Minus() 메소드 바인딩

Mydelegate mysub = new Mydelegate(Calculator.Minus);  // delegate 수행
Console.WriteLine("두 값의 차이는 " + mysub(11, 5) + " 입니다");


Mydelegate multiply = cal.Multiply;  // new Mydelegate(cal.Multiply) 의 축약형

Console.WriteLine("두 값의 곱셈은 " + multiply(3, 4) + " 입니다");


델리게이트(delegate) 는

- 정적, 비정적 메소드 구분없이 사용

- 특정 틀래스에 소속되지 않음

- 타입만 일치하고 접근만 허용되면 어떤 메소드도 접근 가능


위 코드를 직접 실행해 볼 수 있는 소스코드이다.


delegate-01.zip


Ctrl + F5 키를 누르면 콘솔창에 값이 표시된다.

아니면 마지막 줄에 Console.ReadLine(); 을 추가해주고 F5 키를 눌러도 된다.


블로그 이미지

Link2Me

,