-
[C#] Delegate에 대한 공부(3) Delegate ChainC# 2022. 4. 1. 13:12728x90
안녕하세요.
벌써 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