본문 바로가기
Study/C#

[C#][Study][기초다지기] 딜리게이트 event 함수

by 스테디코디스트 2023. 9. 23.
반응형

Event 함수

- event 함수 호출시 연결된 delegate를 이용해 Event Handler(이벤트 처리 함수)를 호출하는 기능

- event 키워드를 사용하여 생성

- Event Handler는 리턴형이 없어 항상 void로 반환함

- 모든 이벤트는 delegate를 기반으로 함

- 이벤트는 객체가 있어야 함

- 이벤트 처리 함수는 이름 앞에 보통 "On"으로 시작하게 함

 

[이벤트 동작 순서]

1) delegate 정의

2) delegate와 동일한 이름으로 이벤트를 정의

3) 이벤트 발생시 처리될 이벤트 처리 함수(Event Handler)를 정의

4) delegate를 위한 함수가 있어야 함

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace event_programming
{
    //This is Subscriber Class
    class Program
    {
        static void Main(string[] args)
        {
            AddTwoNumbers a = new AddTwoNumbers();
            
            // 이벤트에 delegate 추가
            a.ev_OddNumber += new AddTwoNumbers.dg_OddNumber(EventMessage);
            a.Add();
            Console.Read();
        }      
        
        // 이벤트 발생시 delegate가 이 함수를 호출함 
        static void EventMessage()
        {
            Console.WriteLine("********Event Executed : This is Odd Number**********");
        }
    }
    
    //This is Publisher Class
    class AddTwoNumbers
    {        
        public delegate void dg_OddNumber(); // delegate 선언
        public event dg_OddNumber ev_OddNumber; // Event 선언
 
        public void Add()
        {
            int result;
            result = 5 + 4;
            Console.WriteLine(result.ToString());
            
            // result가 홀수면 이벤트를 발생시킴
            if((result % 2 != 0) && (ev_OddNumber != null))
            {
                ev_OddNumber(); // 이벤트 발생
            }          
        }
    }
}