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) 는
- 정적, 비정적 메소드 구분없이 사용
- 특정 틀래스에 소속되지 않음
- 타입만 일치하고 접근만 허용되면 어떤 메소드도 접근 가능
위 코드를 직접 실행해 볼 수 있는 소스코드이다.
Ctrl + F5 키를 누르면 콘솔창에 값이 표시된다.
아니면 마지막 줄에 Console.ReadLine(); 을 추가해주고 F5 키를 눌러도 된다.
'C# > Layout 및 델리게이트' 카테고리의 다른 글
C# 폼의 크기 조절 불가 (0) | 2016.01.27 |
---|---|
C# 이벤트 개념 잡기와 만들기 (2) | 2016.01.17 |
C# 델리게이트(delegate) 개념 잡히는 예제 (5) | 2016.01.17 |
C# 자식 Form 의 위치를 내마음대로 (2) | 2015.12.16 |
C# 폼크기 및 위치 저장(Properties.Settings 이용) (0) | 2015.12.03 |