본문 바로가기

개인공부/C#

[C#] 이벤트(Event)

 

■ 이벤트(Event) : 

 - 클래스(Class) 내부에서 어떤 일(Event)이 생겼을 때 외부에 알리는 기능

 - 이벤트의 가입자(subscriber)에게만 알림

 - event 키워드로 선언

 - 이벤트 추가 : +=  연산자

 - 이벤트 제거 : -= 연산자

 

- EventHanlder 사용 방법 (전달할 값이 없는 형태)

 

EventHandler에는 하나 이상의 함수도 연결 가능

■ Example

using System;

namespace EventExample
{

    class TestEvent
    {
        public event EventHandler SomethingHappend;

        public void Run()
        {
            SomethingHappend += DoSomethingEvent;
            SomethingHappend += DoSomethingEvent02;
            SomethingHappend?.Invoke(this, null);
        }

        private void DoSomethingEvent(object sender, EventArgs e)
        {
            Console.WriteLine($"[DoSomethingEvent] 이벤트 발생!!");
        }
        private void DoSomethingEvent02(object sender, EventArgs e)
        {
            Console.WriteLine($"[DoSomethingEvent02] 이벤트 발생!!");
        }
    }

    class Program
    {       
        static void Main(string[] args)
        {
            TestEvent testEvent = new TestEvent();
            testEvent.Run();
            
        }
    }
}

 

Example 결과

 

 

- EventHanlder 사용 방법 (전달할 값이 있는 형태)

 

User 객체를 전달하는 형식

■ Example

using System;

namespace EventExample
{
    class User
    {
        public string Name { get; set; }
        public int Age { get; set; }
    }

    class TestEvent
    {
        private event EventHandler<User> SomethingHappend;

        public void Run()
        {
            SomethingHappend += DoSomethingEvent;
            SomethingHappend?.Invoke(this, new User() { Name = "홍길동", Age = 20 });
        }

        private void DoSomethingEvent(object sender, User e)
        {
            Console.WriteLine($"[DoSomethingEvent] 이벤트 발생!!, Name = {e.Name}, Age = {e.Age}");
        }
    }

    class Program
    {       
        static void Main(string[] args)
        {
            TestEvent testEvent = new TestEvent();
            testEvent.Run();            
        }
    }
}

 

Example 결과

 

 

 

 

'개인공부 > C#' 카테고리의 다른 글

[C#] 람다식(Lambda Expression)  (0) 2023.02.17
[C#] 대리자(Delegate), 이벤트(Event) 차이점  (0) 2023.02.15
[C#] 대리자(Delegate)  (0) 2022.10.13
[C#] 예외(Exception)  (0) 2022.10.07
[C#] 일반화(Generalization)  (0) 2022.09.26