참고 영상 https://www.youtube.com/watch?v=0MhAFzZKaJk&list=PLVsNizTWUw7GN8wPRhclbKuQa9aI9Cj2V&index=14
⚔ 델리게이트 예시
delegate void MyDelegate(string message);
static void Method1(string message)
{
Console.WriteLine("Method1: " + message);
}
static void Method2(string message)
{
Console.WriteLine("Method2: " + message);
}
static void Main(string[] args)
{
MyDelegate myDelegate = Method1;
myDelegate += Method2;
myDelegate("Hello!");
}
// 출력
>> Method1: Hello!
>> Method2: Hello!
다른 코드 블록에서 재사용될 일이 없는 이름 없는 메소드
익명 메소드 구현 절차
1. 사전 정의된 대리자의 시그니처(메서드 형식)에 맞춰 익명 메소드 작성
2. 익명 메소드 정의시 delegate 키워드로 시작하고, 정의된 코드는 대리자 참조에 할당
3. 익명 메소드를 할당받은 대리자 참조 호출
⚔ 익명 메서드 예시
delegate int Calculator(int a, int b);
public static void Main()
{
Calculator calculator;
// 1. 익명 메서드 작성, 2. 대리자 참조에 할당
calculator = delegate(int a, int b)
{
return a+b;
};
// 3. 대리자 참조 호출
Console.WriteLine("5+4 : {0}", calculator(5,4));
}
// 출력
>> 5+4 : 9
event 한정자로 수식하여 선언⚔ 이벤트와 이벤트 처리기 예시
// 1. 대리자 선언
delegate void EventHandler(string message);
// 2. 대리자 인스턴스를 event 한정자로 수식
class Messenger
{
public event EventHandler SomethingHappened; // 참조 선언
public void DoSomething(int number)
{
int temp = number % 10;
if (temp != 0 && temp % 3 == 0)
{
SomethingHappened(String.Format("{0} : 짝", number));
}
}
}
class MainApp
{
// 3. 이벤트 처리기 작성
static public void MyHandler(string message)
{
Console.WriteLine(message);
}
//4. 클래스의 인스턴스 생성 및 해당 인스턴스의 이벤트에 처리기 등록
static void Main(string[] args)
{
Messenger messenger = new Messenger();
// 이벤트 // 대리자 // 이벤트 처리기
messenger.SomethingHappened += new EventHandler(MyHandler);
for (int i = 1; i < 30; i++)
{
messenger.DoSomething(i);
}
}
}
(매개변수 목록) => { ... };꼴로 이루어진 식이다.
람다식으로 무명함수 정의하기
무명함수(Anonymous Function)는 람다식으로 만드는 익명 메서드다.
무명함수를 작성하기 위해서는 먼저 대리자로 무명함수의 모습을 결정한다.
⚔ 무명함수 예시
delegate int Calculator(int a, int b);
static void Main(string[] args)
{
// Calculator calculator = (int a, int b) => a + b;
// 데이터 형식 생략 가능
Calculator calculator = (a,b) => a+b;
Console.WriteLine( calculator(1, 2) );
}
⚔ 무명함수 문 형식 예시
문 형식으로 작성할 때는 ()=> { } 처럼 실행할 코드를 코드 블럭으로 감싼다.
delegate void DoSomething();
// ...
static void Main(string[] args)
{
// 문 형식
DoSomething doSomething = () =>
{
Console.WriteLine(“Something”);
}
}