728x90
https://www.youtube.com/watch?v=0MhAFzZKaJk&list=PLVsNizTWUw7GN8wPRhclbKuQa9aI9Cj2V&index=14
📌 대리자
◾ 대리자
- 메서드를 대신 실행하는 객체 - 메서드 호출 하듯 사용 (인수를 입력하고 결과를 반환 받음) 단, 대리자가 실행할 코드는 컴파일 시점이 아닌 실행 시점에 결정
◾ 대리자의 선언과 사용
- delegate키워드 이용하여 선언
- 메서드와 같이 대리자 또한 매개변수 목록과 반환 형식을 가지나, {} 는 쓰지 않는다.
private delegate int MyDelegate (int a, int b);
int plus (int a, int b)
{ return a+b; }
int Minus (int a, inb b)
{ return a-b; }
My Delegate Callback;
Callback = new MyDelegate ( Plus );
Callback = new MyDelegate ( Minus );
📌 익명 메서드
- 다른 코드 블록에서 재사용될 일이 없는 이름 메서드
- 익명 메서드 구현 절차
- 사전 정의된 대리자 형식 (반환형식, 매개변수)에 맞춰 익명 메서드 작성
- 익명 메서드 정의 시 delegate 키워드로 시작하며, 정의된 코드는 대리자 참조에 할당
- 익명 메서드를 할당받은 대리자 참조 호출
대리자참조 = delegate (매개변수목록)
{
//익명 메서드 본문
}
📌 이벤트
◾ 이벤트
- 객체의 사건을 표현하는 형식
- 이벤트 처리기 : 이벤트 발생시 실행되는 메서드
- 동작원리는 대리자와 유사하며 이벤트는 객체의 은닉성 표현을 위해 외부에서 직접 호출 할 수 없음
- 대리자를 event 한정자로 수식하여 선언
◾ 이벤트 처리기의 선언
//1. 대리자 선언
delegate void EventHandler(string message);
//클래스 내 선언한 대리자 인스턴스를 event 한정자로 수식
class MyNotifier
{
public event EventHandler SomethingHappend;
public void DoSomething(int number)
{
int tmp = number % 10;
if (tmp != 0 && tmp % 3 == 0)
{
somethingHappend(String.Format("{0} : 짝", number));
}
}
}
//2. 이벤트 처리기 작성
class MainApp
{
static public void MyHandler (string message)
{
Console.WriteLine(message);
}
//4. 클래스의 인스턴스 생성 및 해당 인스턴스의 이벤트 처리기 등록
static void Main(string[] args)
{
MyNotifier notifier = new MyNotifier();
nothfier.SomethingHappend += new EventHandler (MyHandler);
for(int i=1; i<30; i++)
{
notifier.DoSomething(i);
}
}
}
}
728x90
'C# > 이것이 C#이다' 카테고리의 다른 글
[C# 기초강의] Ch 15. LINQ (0) | 2023.08.10 |
---|---|
[C# 기초강의] Ch 14. 람다식 (0) | 2023.08.10 |
[C# 기초강의] Ch 12. 예외 처리하기 (0) | 2023.08.10 |
[C# 기초강의] Ch 11. 일반화 프로그래밍 (0) | 2023.08.10 |
[C# 기초강의] Ch 10. 배열과 컬렉션 그리고 인덱서 (0) | 2023.08.10 |