이번에는 델리게이트와 이벤트 정리다~
// 델리게이트 선언
public delegate void MyDelegate(string message);
// 메서드 정의
public void ShowMessage(string msg)
{
Console.WriteLine("메시지: " + msg);
}
// 델리게이트 인스턴스 생성 및 호출
MyDelegate d = new MyDelegate(ShowMessage);
d("안녕하세요!"); // 출력: 메시지: 안녕하세요!
+=, -= 연산자로 메서드 추가/제거 가능// 델리게이트 정의
public delegate void Notify();
// 이벤트 정의
public class Process
{
public event Notify OnCompleted;
public void Start()
{
Console.WriteLine("작업 중...");
Thread.Sleep(1000);
Console.WriteLine("작업 완료!");
// 이벤트 발생
OnCompleted?.Invoke();
}
}
// 이벤트 구독 예제
Process p = new Process();
p.OnCompleted += () => Console.WriteLine("콜백: 작업이 끝났습니다.");
p.Start();
event 키워드는 접근 제한을 위해 사용Invoke 불가 (내부에서만 호출 가능)+=, -= 으로 구독 관리| 항목 | Delegate | Event |
|---|---|---|
| 타입 | 참조형 (함수 포인터 역할) | Delegate를 감싼 멤버 |
| 직접 호출 | 가능 | 외부에서 호출 불가 (Invoke ❌) |
| 구독 방식 | 가능 (+=, -=) | 가능 (+=, -=) |
| 사용 목적 | 콜백, 체이닝 | 알림, 반응 (Observer 패턴) |