일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- springboot
- Spring Boot
- 보통2종
- 백준
- WPF
- 쿼리
- JPA
- 1931번
- c#
- 닫기버튼
- 프로그래머스
- 자바
- 스프링부트
- 씨샵
- Python
- 코딩테스트
- Java
- 3일컷
- MySQL
- level4
- delegate
- level3
- programmers
- level2
- MVVM
- 델리게이트
- 운전면허
- 일반화
- 코테
- SQL
- Today
- Total
욱꾸미의 주꾸미 발
[C#] Delegate에 대한 공부(3) Delegate Chain 본문
안녕하세요.
벌써 Deleagate 세 번째 글이네요.
많은 개발자 분들이 C#을 사용하지는 않지만 C#이라는 언어는 참 신기~한것 같네요.
오늘은 Deleagate Chain에 대해 알아보고자 합니다.
이번글 역시 뇌를 자극하는 C# 5.0프로그래밍 책을 통해 공부한 내용입니다 :D
Deleagate Chain은 delegate하나가 여러개의 메소드를 동시에 참조하는걸 말합니다.
방법은 기존 선언방식에서 다른 메소드를 += 연산자를 통해 연결해 줍니다.
기존에는 하나의 메소드에 대해서만 참조를 하고 넘겨줬지만 이제는 여러개의 메소드를 참조해보겠습니다.
예시로 만나보시죠~
delegate void ThereIsFire(string location);
먼저 사용할 delegate를 선언하겠습니다.
private static void Call119(string location)
{
Console.WriteLine("주소는 {0}입니다\n", location);
}
private static void ShoutOut(string location)
{
Console.WriteLine("불이야 불! {0}에 불났어요!\n",location);
}
private static void Escape(string location)
{
Console.WriteLine("{0}에 불이 났으니 도망치세요~\n", location);
}
동시에 참조할 메소드 들입니다.
위 세개의 메소드를 하나의 delegate에 연결해 보겠습니다.
다음은 메인입니다. 여기서 위에서 언급한 세개의 메소드들을 연결해 주겠습니다.
ThereIsFire fire = new ThereIsFire(ShoutOut);
fire += new ThereIsFire(Call119);
fire += new ThereIsFire(Escape);
fire("회사");
흔히 WPF 이벤트 연결하듯 +=로 계속 메소드를 추가해주면 됩니다.
이부분이 오늘의 핵심이겠네요.
실행 결과입니다.
이렇게 fire("회사")를 통해 세개의 메소드가 연달아 호출되는걸 확인 할 수 있네요.
또다른 Delegate 메소드 체인방법으로는 Delegate.Combine을 하는 방법입니다.
ThereIsFire fire = (ThereIsFire)Delegate.Combine(
new ThereIsFire(ShoutOut),
new ThereIsFire(Call119),
new ThereIsFire(Escape)
);
이렇게 Delegate.Combine을 통해 연결할 메소드들을 추가해주면 되겠습니다.
추가만 될까요? 아니죠~ 이제는 제거하는 방법에 대해 알아보겠습니다.
방법은 역시 간단합니다. 추가에 +=를 통해 추가했다면? 제거는 -=를 이용합니다.
ThereIsFire fire = new ThereIsFire(ShoutOut);
fire += new ThereIsFire(Call119);
fire += new ThereIsFire(Escape);
fire -= Call119;
이렇게 Call119라는 메소드를 제거한 후 실행해보겠습니다.
결과입니다. 제거가 돼서 없이 나오는걸 확인 하실 수 있습니다.
또 다른 방법으로는 Delegate.Remove라는 메소드를 이용하면 됩니다.
방식은 Delegate.Remove(제거할 Delegate 모음, 제거할 Delegate Method)로 확인됩니다.
예시는
ThereIsFire fire = new ThereIsFire(ShoutOut);
fire += new ThereIsFire(Call119);
fire += new ThereIsFire(Escape);
fire = (ThereIsFire)Delegate.Remove(fire, new ThereIsFire(Call119));
이렇게 사용해 주시면 되겠씁니다~
이상으로 Delegate Chain에 대해 간단하게 공부했습니다.
항상 코로나 조심하시고 건강하시길 바랍니다.
감사합니다. :D
'C#' 카테고리의 다른 글
[C#] string.Format사용시 입력 문자열의 형식이 잘못되었습니다. 관련 오류 (0) | 2022.08.11 |
---|---|
[C#] double형 시간변환 관련 (0) | 2022.06.22 |
[C#] Delegate에 대한 공부(2) (0) | 2022.03.22 |
[C#] 일반화(3) (0) | 2022.03.02 |
[C#] 일반화(2) (0) | 2022.01.25 |