Eventhandler?
'어떠한 사건에 대한 동작을 다룬다'는 의미
특정 사건에 대해 이벤트 핸들러가 동작하면, 이 이벤트 핸들러를 구독하고있는 이벤트 리스너들이 동작하는 것이다.
또 좀 더 직관적으로 이해해보자면
object sender를 매개변수로 갖는 delegate라고 이해했다.
<1>
public event EventHandler testEventHandler;
<2>
public event Action<object, EventArgs> testAction;
<3>
public delegate void TestDel(object sender, EventArgs e);
위의 <1>, <2>, <3>은 다 같은 내용으로 형태만 다른 것인데,
이벤트핸들러의 내용을 설명하자면
<2> 처럼 object와 EventArgs를 매개변수로 갖는 Action이다.
Action은 리턴타입이 없는 delegate로,
delegate로 풀어쓰자면 <3>처럼 쓸 수 있다.
내가 이해한 핵심 내용은
매개변수로 object를 받는 것인데, object는 최상위 데이터타입으로, 모든 데이터타입은 object로 표현 가능하다.
단, 팩킹(packing)과 언팩킹(unpacking)의 과정을 거쳐야 한다.
아래 코드에서의 예시로는 ((Player)sender).level;로 sender가 어떤 데이터 타입인지 언패킹 해주어야한다.
오늘 배우는 과정에서는 다른 클래스를 매개변수로 받는 예시를 들어주셨다.
특정 이벤트에 대한 동작을 다룰 때,
몬스터 클래스와 플레이어 클래스에서 각각 다뤄줘야하는 상황이 생긴다면,
매개변수 object로 클래스를 받아 위와같이 사용할 수 있다.
단, 이번 내용에서는 이벤트핸들러의 두번째 매개변수인 EventArgs에 대해 자세히 다루지 않았는데,
이벤트 핸들러를 쓰기 위해서는 위 코드와 같이 매개변수로 같이 받아줘야한다.
'C# > C# 학습 (TIL)' 카테고리의 다른 글
C# 중급문법 Day7 Reflection / DeepCopy 일반화(reflection 적용) (0) | 2022.06.22 |
---|---|
C# 디자인패턴 : 템플릿메서드 / 옵저버패턴 (0) | 2022.06.21 |
C# 디자인패턴 : 전략패턴 (0) | 2022.06.20 |
C# 중급문법 Day5 Action / Func / event / 람다 (0) | 2022.06.20 |
C# 중급문법 Day4 Deligate (0) | 2022.06.17 |