IT 야놀자/C #

이벤트 (Event)

주니어로빈 2019. 11. 6. 20:20
728x90
728x90

1. 이벤트

 

델리게이트 타입을 선언하면 델리게이트 변수도 생성할 수 있지만

이벤트 변수도 생성할 수 있다.

이벤트 변수는 간단히 event 한정자만 붙여주면 된다.

 

          // 델리게이트 타입 선언

          delegate void MyDelegate( int a );

 

          // 델리게이트 변수 선언

          MyDelegate A;

 

          // 이벤트 변수 선언

          event MyDelegate B;

 

이벤트 변수는 델리게이트 변수와 마찬가지로 메소드를 참조하는데 단지 성격이 약간 다르다.

간단히 말해 델리게이트 변수가 public 이라면 이벤트 변수는 private 같은 느낌이랄까?

델리게이트 변수는 자신이 속한 클래스 외부에서도 호출이 가능하지만

이벤트 변수는 외부에서 호출이 불가능하다.

오직 변수가 속한 클래스 내부에서만 사용하도록 제한된 것이다.

잘은 모르겠지만 보안적인 이유에서 이런 구분이 필요한 것 같다.

다음 예제를 작성해보자

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
using System;
using System.Collections.Generic;
 
namespace Cs_Lecture
{
    delegate void MyDelegate( int a );
 
    class EventManager
    {
        public event MyDelegate eventCall;
 
        public void NumberCheck( int num )
        {
            if (num % 2 == 0)
                eventCall( num );
        }
    }
 
    class MainApp
    {
        static void EvenNumber( int num )
        {
            Console.WriteLine("{0}는 짝수", num);
        }
 
        static void Main(string[] args)
        {
            EventManager eventManager = new EventManager();
 
            eventManager.eventCall += new MyDelegate(EvenNumber);
 
            for (int i = 1; i < 10; i++)
                eventManager.NumberCheck(i);
        }
    }
}
 
 

 

(주의할 것은 이벤트 변수는 메소드를 참조할 때 += 로만 참조하도록 할 수 있다.)

위의 예제에서는 숫자가 입력됬을때 짝수인 경우에만 이벤트를 호출하도록 하고 있다.

이벤트는 이처럼 특정 조건이 충족됬을때 (특정 사건(이벤트)이 발생했을 때)

자동으로 메소드를 호출하는 용도로 사용된다.

728x90
728x90