c#에서 event와 EventHandler는 이벤트 기반 프로그래밍에서 사용되는 핵심 개념으로 주로 객체 간의 통신에서 사용되며 하나의 객체에서 어떤 일이 발생했을 때 다른 객체가 이를 감지하고 반응할 수 있게 해줌
event 란?
어떤 객체가 발생시키는 동작 또는 상황으로 그 동작이나 상황을 다른 클래스나 객체에 알리고자 하는 용도로 사용
ex] 버튼을 클릭했을 때
EventHandler 란?
이벤트가 발생될때마다 이벤트를 처리하기 위해 호출되는 메서드로 event 발생시 실행되는 함수
C#에서 자주 사용하는 이벤트 델리게이트(delegate) 형식
EventHandler 기본형태
public delegate void EventHandler(object sender, EventArgs e);
- sender: 이벤트를 발생시킨 객체
- EventArgs: 이벤트에 대한 추가 정보 (필요 없다면 EventArgs.Empty 사용)
커스텀 EventArgs를 사용한 기본 사용 예제
public event EventHandler<OnGridObjectChangedEventArgs> OnGridObjectChanged;
public class OnGridObjectChangedEventArgs: EventArgs
{
public int x;
public int y;
}
OnGridObjectChangedEventArgs라는 EventArgs를 상속받은 클래스를 만들어 해당 타입의 클래스를 인자로 받는 EventHandler OnGridObjectChanged 를 선언
OnGridObjectChanged += ShowDebugging;
private void ShowDebugging(object sender, OnGridObjectChangedEventArgs e)
{
debugTextArray[e.x, e.y].text = gridArray[e.x, e.y]?.ToString();
}
ShowDebugging이라는 함수를 EventHandler에 등록 OnGridObjectChanged 이벤트 핸들러가 호출되면 ShowDebugging 함수가 호출
public void TriggerGridObjectChanged(int x, int y)
{
if (OnGridObjectChanged != null)
{
OnGridObjectChanged(this, new OnGridObjectChangedEventArgs { x = x, y = y });
}
}
OnGridObjectChanged 호출
전체코드
public event EventHandler<OnGridObjectChangedEventArgs> OnGridObjectChanged;
public class OnGridObjectChangedEventArgs: EventArgs
{
public int x;
public int y;
}
OnGridObjectChanged += ShowDebugging;
public void TriggerGridObjectChanged(int x, int y)
{
if (OnGridObjectChanged != null)
{
OnGridObjectChanged(this, new OnGridObjectChangedEventArgs { x = x, y = y });
}
}
private void ShowDebugging(object sender, OnGridObjectChangedEventArgs e)
{
debugTextArray[e.x, e.y].text = gridArray[e.x, e.y]?.ToString();
}
반응형
'Unity' 카테고리의 다른 글
A* Search Path 알고리즘 (A star 경로 탐색 알고리즘) (2) | 2025.07.28 |
---|---|
Basic GridSystem 만들어보기 (2) | 2025.07.22 |
Final Depth copy attachment 0 was created with 4 samples but 8 samples were requested (0) | 2025.02.21 |
Cinemachine 3인칭 Follow Camera 사용하는 방법 (0) | 2025.02.20 |
RectTransformUtility.ScreenPointToLocalPointInRectangle (0) | 2025.02.11 |