본문 바로가기

Programming Language/C#

[C#] Event

  • 이벤트를 정의하려면 먼저 대리자(Delegate)를 선언해야 한다.
  • 클래스 내부에서 이벤트를 정의하고, 해당 이벤트에 대응하는 대리자를 선언한다.
  • 외부에서는 이벤트에 대한 핸들러 메서드를 등록하거나 제거할 수 있다.

InVoke :


  • InVoke 메서드를 호출하여 해당 대리자가 참조하는 메서드를 실행할 수 있다.
  • Invoke 를 통해 이벤트를 호출하면 해당 이벤트에 등록된 모든 이벤트 헨들러가 순차적으로 실행 된다.
using System;

// 이벤트를 처리할 대리자 선언
public delegate void EventHandler(string message);

// 이벤트를 정의하는 클래스
public class Publisher
{
    // 이벤트 정의 (대리자와 연결)
    public event EventHandler MyEvent;

    // 이벤트를 발생시키는 메서드
    public void RaiseEvent(string message)
    {
        Console.WriteLine("이벤트 발생: " + message);

        // 이벤트가 null이 아니면 이벤트 핸들러 호출
        MyEvent?.Invoke(message);
    }
}

// 이벤트를 처리하는 클래스
public class Subscriber
{
    // 이벤트 핸들러 메서드
    public void HandleEvent(string message)
    {
        Console.WriteLine("이벤트 처리: " + message);
    }
}

class Program
{
    static void Main()
    {
        // 이벤트를 발생시키는 객체 생성
        Publisher publisher = new Publisher();

        // 이벤트를 처리하는 객체 생성
        Subscriber subscriber = new Subscriber();

        // 이벤트 핸들러 등록
        publisher.MyEvent += subscriber.HandleEvent;

        // 이벤트 발생
        publisher.RaiseEvent("안녕하세요!");

        // 이벤트 핸들러 제거
        publisher.MyEvent -= subscriber.HandleEvent;

        // 다시 이벤트 발생
        publisher.RaiseEvent("다시 안녕하세요!"); // 더 이상 처리되지 않음
    }
}

'Programming Language > C#' 카테고리의 다른 글

[ C# ] Model 구현, GraphQL Api 연동 예제  (0) 2024.02.20
[C#] 전처리기  (0) 2023.12.27
[C#] Delegate(대리자)  (0) 2023.12.27
[C#] 메서드 파라미터 ( ref, out )  (0) 2023.12.27
[C#] Nullable 타입 ( ?, ?? )  (1) 2023.12.27