[C# 기초강의] Ch 13. 대리자와 이벤트

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 );

 

📌 익명 메서드

  • 다른 코드 블록에서 재사용될 일이 없는 이름 메서드
  • 익명 메서드 구현 절차
  1. 사전 정의된 대리자 형식 (반환형식, 매개변수)에 맞춰 익명 메서드 작성
  2. 익명 메서드 정의 시 delegate 키워드로 시작하며, 정의된 코드는 대리자 참조에 할당
  3. 익명 메서드를 할당받은 대리자 참조 호출
대리자참조 = 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