정수값을 변수에 담고 싶을때는
정수를 담고싶을때는 int로 선언하면됩니다.
문자를 담고싶을때는 string로 선언하면됩니다.
함수(or 메소드)를 변수에 담고 싶을땐 어떻게 할까요?
이때 사용하는것이 대리자(delegate)입니다.
이 글과 읽으면 좋은글
1. 델리게이트 선언방법
1) 제일 앞에 delegate 명시하고, 리턴값 타입, 매개변수 구성을 맞춰서 정의를 합니다.
아래 그림 처럼 변수에 넣고 싶은 메소드인 Print의 구성요소를 맞춰서 delegate를 정의하는것을 알 수 있습니다.
2) 메소드를 가진 클래스를 먼저 객체화 하고, 메소드를 델리게이트의 인자로 넣는 형태로 정의를 합니다.
델리게이트가 마치 변수처럼 사용되는걸 알 수 있습니다.
Output:
이 방법 외에도 c# 2.0이상에서 사용하는 방법으로 아래와 같이 사용할 수 있습니다.
인자로 넣는 것이 아니라 할당 하는 식으로 정의를 합니다.
2. 멀티캐스트 델리게이트(multicast delegate) /+=, -= 사용
델리게이트를 이용하면 변수에 함수 1개만 담는게 아니라 여러개를 담을 수도 있습니다.
아래와 같이 대리자(델리게이트)를 이용할 준비를 합니다.(return 타입, 매개변수 구성 맞추기)
델리게이트에 PrintA, PrintB를 함께 담아보겠습니다.
위와 같이 기존처럼 델리게이트를 이용하되, 추가하고싶은 메소드(여기선 Test.PrintB)는 += 를 이용해서 추가 합니다.
Output:
하나의 델리게이트를 실행했는데 두개의 메소드가 실행된걸 알 수 있습니다.
'c#' 카테고리의 다른 글
[c#] private set 사용 이유?(프러퍼티) (0) | 2022.05.11 |
---|---|
[c#] 프로퍼티(property)란? - 사용 이유/ 사용법 (0) | 2022.05.11 |
[c# 기초] 코드 동작 시간 측정 (with Stopwatch) (0) | 2022.05.09 |
[c# 기초] StringBuilder 사용 이유? (0) | 2022.05.09 |
[c# 기초] partial을 쓰는 이유? (0) | 2022.05.06 |
댓글