Delegate란?
- 델리게이트는 대리자 혹은 c언어에서 쓰이는 포인터와 같은 개념입니다.
- 즉 대신 일해주는 녀석인데 주로 메소드를 참조(진짜 포인터랑 비슷)하고 있는 영역이라고 말 할 수 있습니다.
- 주의할 점은 전달할 매소드의 매개변수와 반환 값이 델리게이트와 같아야 합니다.
사용 방법
- delegate 반환형 델리게이트명(매개변수..);
Delegate 사용 방법
private delegate int SummaryDelegate(int a, int b);
private int Sum(int a, int b) => a + b;
public void Run()
{
//Sum이라는 메서드를 sd1이 참조하여 사용 할 수 있습니다.
SummaryDelegate sd1 = Sum;
//간단한 메서드 같은경우 아래와 같이 delegate를 선언해서 사용할 수 있습니다.
SummaryDelegate sd2 = delegate (int a, int b)
{
return a + b;
};
Console.WriteLine($"3 +4 = {sd1(3, 4)}");
Console.WriteLine($"4 +4 = {sd2(4, 4)}");
}
결과
3 +4 = 7
4 +4 = 8
Delegate Chain
- Delegate.Combine을 이용해서 형태가 같은 여러가지 Method를 묶을수 있습니다.
XML Deserialization
private delegate void WriteMessage(string name);
private void ShowName(string name) => Console.WriteLine($"안녕하세요. 저는 {name}입니다. ");
private void ShowInfo1(string name) => Console.WriteLine($"{name}은 수원에 살고 있습니다. ");
private void ShowInfo2(string name) => Console.WriteLine($"{name}의 번호는 010-1234-5554입니다. ");
public void Run()
{
//Delegate.Combine를 이용해 Method를 묶을수 있습니다.
WriteMessage sd1 = (WriteMessage)Delegate.Combine(new WriteMessage(ShowName), new WriteMessage(ShowInfo1)
, new WriteMessage(ShowInfo2));
//한방에 짜잔!
sd1("Yangbeng");
}
결과
안녕하세요. 저는 Yangbeng입니다.
Yangbeng은 수원에 살고 있습니다.
Yangbeng의 번호는 010-1234-5554입니다.
이렇게 여러 메소드를 한번에 사용하고 싶을 때 쓸 수 있을 거 같습니다.
참고
C# 강좌