프로그래밍/C#
[C#] 이벤트 생성 및 사용자 정의 EventArg
건앤로즈
2015. 3. 23. 18:18
이벤트를 사용자가 생성하고 구독하는 방법에 대해서 살펴보겠습니다.
이벤트를 받을때 파라미터로 데이터를 받으려면 EventArg클래스를 상속받아서 원하는 항목을 추가해서
사용이 가능합니다.
아래는 이벤트를 발생시키는 클래스와 EventArg를 재정의한 클래스, 그리고 그 이벤트를 사용하는 예제입니다.
1.EventArg
/// Event Arguments Class /// </summary> public class HongsEventArgs : EventArgs { public string Message { get; set; } public string SimpleData { get; set; } public List<Object> Data { get; set; } }
위의 HongsEventArgs는 EventArgs를 상속받아서 3가지의 멤버변수를 추가했습니다.
여기에서 위의 2개는 단순 데이터 전달을 위해서 추가했구요, 마지막은 어디서나 사용가능하게
object를 리스트로 선언해서 어떠한 데이터라도 받을 수 있게 처리하였습니다.
2.이벤트 발생클래스
class SomethingEvent { public event EventHandler eventSomthingClicked; public void RaseEvent() { try { if (eventSomthingClicked != null) { HongsEventArgs nowEventArg = new HongsEventArgs(); nowEventArg.Message = "이벤트 클릭"; nowEventArg.SimpleData = "NewSimpleData"; nowEventArg.Data = new List<object>(); nowEventArg.Data.Add(32); nowEventArg.Data.Add("HongJinHyeon"); nowEventArg.Data.Add(new List<string>()); eventSomthingClicked(null, nowEventArg); } } catch (Exception) { throw; } } }
위에서는 이벤트를 event EventHandler 로 선언해주고, 이벤트를 발생하는 부분에서 HongsEventArgs를 인스턴스화 해서 값 들을
할당을 해줍니다. 그리고 eventSomthingClicked(null,nowEventArg)로 이벤트를 발생시켜줍니다.
여기서 if로 eventSomthingClicked가 null 인지 체크하는 부분이 있는데요. 이 체크를 안하고 그냥 이벤트를 발생시켜버리면 오류가
발생합니다. 이유는 이 이벤트를 실행하는 것이 델리게이트를 실행하는것과 비슷한데요 그 대상 함수가 없으니 오류가 발생하는 것입니다.
3.이벤트 구독
private void Form1_Load(object sender, EventArgs e) { try { SomethingEvent EventCreator = new SomethingEvent(); EventCreator.eventSomthingClicked += EventCreator_eventSomthingClicked; EventCreator.RaseEvent(); } catch (Exception) { throw; } } void EventCreator_eventSomthingClicked(object sender, EventArgs e) { try { HongsEventArgs RecievedEventArg = e as HongsEventArgs; Console.WriteLine(RecievedEventArg.SimpleData); } catch (Exception) { throw; } }
사용은 위에서처럼 이벤트를 구독한 후에, 이벤트를 구독하는 메서드에서 EventArgs를 as로 형변환을 해주고 사용해주면 됩니다.