본문 바로가기

개인공부/C#

[C#] 대리자(Delegate), 이벤트(Event) 차이점

 

■ 대리자(Delegate), 이벤트(Event) 차이점

 - 대리자(Delegate)는 public 혹은 internal인 경우 클래스 외부에서 호출이 가능

 - 이벤트(Event)는 public이라도 클래스 외부에서 호출 불가

 - 대리자(Delegate)는 콜백 역할

 - 이벤트(Event)는 상태 변화 혹은 사건의 알림 역할

이벤트 SomethingHappend 직접 호출 불가

 

 

■ Example

TestEvent의 SomethingHappend 이벤트 핸들러에 대리자 EventHandler로 TestEvent_SomethingHappend 함수 연결

 

using System;

namespace EventExample
{
    public delegate void EventHandler(string msg);

    class TestEvent
    {
        public event EventHandler SomethingHappend;

        public void Run(int num)
        {
            if(num%2 == 0)
                SomethingHappend?.Invoke(string.Format($"짝수 이벤트 발생!! num = {num}"));
        }
    }

    class Program
    {       
        static void Main(string[] args)
        {
            TestEvent testEvent = new TestEvent();
            testEvent.SomethingHappend += new EventHandler(TestEvent_SomethingHappend);

            for(int i = 1; i <= 10; i++)
            {
                testEvent.Run(i);
            }
        }

        private static void TestEvent_SomethingHappend(string msg)
        {
            Console.WriteLine($"[TestEvent_SomethingHappend] {msg}");
        }
    }
}

 

Example 결과

 

 

 

 

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

[C#] Func, Action 대리자  (0) 2023.02.17
[C#] 람다식(Lambda Expression)  (0) 2023.02.17
[C#] 이벤트(Event)  (0) 2023.02.14
[C#] 대리자(Delegate)  (0) 2022.10.13
[C#] 예외(Exception)  (0) 2022.10.07