본문 바로가기

C#

C# Delegate, Event


1. 델리게이트

C#에서 델리게이트란 메서드를 참조하고 호출하는데 사용되는 형식이다. 데리게이트는 메서드에 대한 참조를 보유하고 있고 해당 메서드를 호출할 수 있다. 이를 통해 메서드를 캡슐화하고 다른 메서드에 전달하거나 이벤트 처리 등에 유용하게 활용할 수 있다.
델리게이트를 사용하기 위해선 delegate 키워드를 사용한다.
delegate 반환형 이름(매개 변수);​

위의 형태를 따라서 선언하며 참조하고자 하는 메소드의 경우 델리게이트의 반환형, 매개변수가 동일해야 참조가 가능하다. 

해당 예제에서는 PDelegate란 이름으로 델리게이트를 선언 후 Plus 메소드를 해당 델리게이트에 참조 시켜 출력한다. 이를 통해 Plus 메서드를 PDelegate가 참조하고 있다는 것을 알 수 있다.

델리게이트 생성시 Combine 키워드를 사용한다면 여러개의 델리게이트를 한번에 참조시키고 실행 할 수 있다.
모두 동일한 형태의 반환형과 매개변수를 가져야 한다.

2. 이벤트

이벤트는 클래스내에 발생한 이벤트를 이벤트 가입자에게 알려주는 기능을한다. event 키워드로 표시하기 필드처럼 정의한다. 또한 이벤트가 발생했을때 실행할 명령을 이벤트 핸들러라 칭한다.
+= 을 통해 이벤트에 가입 시킬 수 있다. 반대로 삭제하기 위해선 -= 를 사용한다. 하나의 이벤트에는 여러 개의 이벤트핸들러를 추가할 수 있다.

MyEventHandler 라는 이름으로 델리게이트를 선언했다. 선언한 델리게이트를 리턴값으로 가지는 이벤트를 등록했다.
void Run(int speed) 메소드의 내부 조건식으로 speed 가 50보다 클때 OverSpeed 이벤트가 발생하도록 설정 후 
선언한 델리케이트와 동일한 형식을 가지는 메서드인 MyHandler 를 선언 했다.
Main 메서드 내부에는 car 객체 생성 후 이벤트에 += 구문을 사용하여 MyHandler를 가입시키고 Run 메서드를 통해 이벤트가 정상으로 발생하는것을 확인한 예제이다.

 

'C#' 카테고리의 다른 글

C# 인덱서  (0) 2023.07.07
C# 전처리기  (0) 2023.07.07
C# 메서드  (0) 2023.07.07
C# Nullable 타입  (0) 2023.07.07
C# 클래스  (0) 2023.07.06