1 / 12

10 장 델리게이트 (Delegates) 와 이벤트 (Events)

10 장 델리게이트 (Delegates) 와 이벤트 (Events). 10.1 델리게이트 (Delegates) 10.2 이벤트 (Event). 10.1 델리게이트 (Delegates)( 계속 ). 델리게이트 다른 메서드에 대한 참조를 가지고 있다가 델리게이트 자신이 실행되면 참조하고 있는 메서드를 실행한다. 10.1 델리게이트 (Delegates)( 계속 ). 델리게이트의 합성 (Composition) +/- 연산자를 사용하여 델리게이트끼리 합성하고 제거할 수 있다.

wendi
Télécharger la présentation

10 장 델리게이트 (Delegates) 와 이벤트 (Events)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 10장 델리게이트(Delegates)와 이벤트(Events) 10.1 델리게이트(Delegates) 10.2 이벤트(Event)

  2. 10.1 델리게이트(Delegates)(계속) • 델리게이트 • 다른 메서드에 대한 참조를 가지고 있다가 델리게이트 자신이 실행되면 참조하고 있는 메서드를 실행한다.

  3. 10.1 델리게이트(Delegates)(계속) • 델리게이트의 합성(Composition) • +/- 연산자를 사용하여 델리게이트끼리 합성하고 제거할 수 있다.

  4. 10.1 델리게이트(Delegates) • 명명된 메쏘드(Named Method) • 델리게이트가 할당될 때 생성자의 매개 변수로 받는 미리 선언된 메쏘드 • 메쏘드가 어느 메모리 주소에 있는가에 대한 참조를 갖고 있다가 자신이 호출 될 때 그 주소로 이동하여 메쏘드의 구현 코드를 실행 • 익명 메쏘드(Anonymous Method) • 재사용되지 않는 코드를 가진 메쏘드를 델리게이트가 호출하게 될 경우에 유용하게 사용됨 • 델리게이트 객체를 할당할 때 델리게이트 생성자에 메쏘드의 이름을 넘기는 대신, 직접 구현을 등록

  5. 10.2 이벤트(Event)(계속) • 이벤트 • 이벤트는 객체가 어떤 행동의 발생을 알리기 위해 보내는 메시지 • 이벤트를 발생시키는 객체를 “이벤트 발신자”라고 하고 이 이벤트를 받아 응답하는 객체를 “이벤트 수신자”라고 한다. <이벤트 발신자(Sender)와 이벤트 수신자(Receiver)>

  6. 10.2 이벤트(Event)(계속) • 이벤트의 형식 object sender는 이벤트 발신자 객체이고, EventArgs args객체는 이벤트에 관련된 정보를 가지고 있는 객체

  7. 10.2 이벤트(Event) • 이벤트 구성 단계 • 이벤트가 발생했을 때 호출될 델리게이트를 선언 • 다음을 포함하는 클래스를 만든다. • 이벤트의 선언 • 델리게이트의 인스턴스가 존재하는 지를 확인하는 로직 • 이벤트를 호출하는 메서드 • 이벤트 발생시에 호출되는 메서드를 이벤트에 연결하는 클래스를 하나 이상 정의 • += 및 -= 연산자를 사용하여 하나 이상의 메서드를 기본 클래스의 이벤트에 연결 • 이벤트에 연결되는 메서드의 정의 • 다음과 같이 이벤트를 사용한다. • 이벤트가 선언된 클래스의 인스턴스를 선언. • 사용자 정의 생성자를 사용하여 이벤트가 정의된 클래스의 개체를 만든다.

  8. 이벤트 선언 public eventMyDelegate myevent ; [형식] 접근지정자 event 델리게이트이름 이벤트멤버이름 • 대부분의 이벤트가 외부에서 접근해야 하기 때문에 public으로선언 • event 키워드를 이용해서 이벤트 멤버임을 선언 • 델리게이트이름은 지금 선언하는 이벤트 멤버와 짝이 될 델리게이트 이름을 적어줌. • 지금 선언하는 이벤트가 발생했을 때 해야 할 일을 정의해놓은 메서드를 호출하기 위한 참조값을 가지고 있는 델리게이트 이름을 적어줌. • 이벤트멤버이름은 다른 멤버 변수처럼 임의로 정해서 지정

  9. 이벤트에 델리게이트 인스턴스 추가 / 삭제 • 이벤트에 델리게이트 인스턴스를 추가해줘야만 이벤트가 발생되었을 때 어떤 일을 처리 가능 • 여러 개의 델리게이트 인스턴스를 추가 및 삭제 가능 • 이벤트와 메서드를 연결시켜 줌으로써 이벤트가 발생하면해당 메서드를 호출하라는 의미 • 델리게이트 인스턴스를 생성할 때 • 델리게이트 인스턴스에 호출될 메서드 참조값을 대입 • 이벤트와 같이 코딩을 할 때 • 호출될 메서드 참조값을 이벤트에 추가 • 여러 개의 메서드를 추가 가능 • 이벤트가 발생되면 추가한 각 메서드가 모두 실행 ec.myevent += new MyDelegate(EventCallFunc) ;

  10. 이벤트 발생 • 이벤트멤버이름 오른쪽에 괄호를 붙여서 코딩해 주면 발생 • 이벤트가 발생되면 이벤트에 추가된 델리게이트 인스턴스들을참고로 해서 각 메서드를 호출 • 델리게이트는 메서드의 참조값을 가지고 있고 이벤트는그 참조값을 여러 개 가지고 있다가 동시에 실행시킬 수있다. myevent() ;

  11. Windows 프로그램에서의 event 사용 using System; using System.Drawing; //Graphics클래스가 있는 네임스페이스 using System.Windows.Forms; //Form 클래스가 있는 네임스페이스 namespace eventExThree { class PaintEvent { public static void Main() { Form form = new Form(); //form 객체의 Paint 이벤트에 델리게이트 추가 form.Paint += new PaintEventHandler(MyPaintHandler); Application.Run(form); }

  12. Windows 프로그램에서의 event 사용 static void MyPaintHandler(object objSender, PaintEventArgs pea) { Graphics grfx = pea.Graphics; grfx.Clear(Color.Red); } } } • Form 클래스는 Control 클래스에서 파생되었고 Control 클래스에 Paint 이벤트가 선언 • System.Windows.Forms 네임스페이스 안에 다음처럼 선언됨 public delegate void PaintEventHandler(object objsender, PaintEventArgs pea) • object objsender : event의 source • PaintEventArgs pea : 발생한 event와 함께 전달되어야 할 정보

More Related