이벤트
- 어떤 사건이 발생했을 때 호출되어야 하는 메소드의 목록
- 이벤트에 의해 호출되는 메소드를 특별히 이벤트 핸들러라고 부른다
- 지정자 event 델리게이트 이름; < 선언 형식
- 이벤트는 델리게이트 내부적으로 구현, 먼저 선언 해둬야 한다
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | using System; namespace CompleteEvent { delegate void Notice(); class Printer { public void Print() // 수신완료라는 사건에 대한 이벤트 핸들러 { Console.WriteLine( "수신된 데이터를 인쇄합니다" ); } } class Receiver // 수신완료 시 호출할 메소드를 저장하기 위해 OnComplete 이벤트 소유 { public event Notice OnComplete; public void Receive() // 네트워크에서 데이터를 수신하는 동작 { for ( int i=0;i<100;i++) { Console.WriteLine(i + "%수신중" ); System.Threading.Thread.Sleep(50); } if (OnComplete != null) OnComplete(); } } class Program { static void Main(string[] args) { Printer P = new Printer(); Receiver R = new Receiver(); R.OnComplete += P.Print; // OnComplete 이벤트후에 호출하고 싶은 메소드 등록 R.Receive(); // P.Print(); } } } |
- 이벤트 발생기는 단순히 사건 발생을 알릴뿐이지 핸들러에게 어떤 요청이나 질문은 하지 않는다
- 이벤트는 델리게이트에 비해 훨씬 더 제한적인 동작만 가능
- 이벤트는 델리게이트의 복잡한 문법을 숨김으로써 사용자들이 훨씬 더 간단하게 이벤트를 다룰수 있게 한다
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 | using System; namespace ClickEvent { public delegate void deleClick(); class Button // Click이벤트 선언 { public event deleClick Click; public void Draw() { Console.WriteLine( "나는 버튼" ); } public void OnClick() // Click에 저장되어있는 메소드 호출 { if (Click !=null) Click(); } } class Program { static void GameStart() { Console.WriteLine( "게임시작" ); for ( int i=0; i<5;i++) { Console.WriteLine( '.' ); System.Threading.Thread.Sleep(50); } Console.WriteLine( "\n 게임 끝" ); } static void Main(string[] args) // 이벤트에 GameStart라는 핸들러 할당 { Button BtnStart = new Button(); BtnStart.Draw(); BtnStart.Click += GameStart; Console.WriteLine( "S:게임시작. E:끝" ); for (; ; ) { if (Console.KeyAvailable) { ConsoleKeyInfo cki; cki = Console.ReadKey(); if (cki.Key == ConsoleKey.S) { BtnStart.OnClick(); } if (cki.Key == ConsoleKey.E) { break ; } } } } } } |
'Study > C#' 카테고리의 다른 글
C# 닷넷 클래스 - 1. 루트 클래스 (object) (0) | 2012.01.10 |
---|---|
C# 델리게이트 - 2. 이벤트 (익명 메소드) (0) | 2012.01.10 |
C# 델리게이트 - 2. 이벤트 (멀티캐스트) (0) | 2012.01.09 |
C# 델리게이트 - 1. 델리게이트 (활용) (0) | 2012.01.09 |
C# 델리게이트 - 1. 델리게이트 (공변성) (0) | 2012.01.06 |