728x90
반응형

윈도우 프로그램을 작성할때 메세지에 따라 동작하게 하는데 여기서 이벤트의 의미가 중요하다.


EVENT 의미

  • (특히 중요한) 사건 (ex. 사용자가 마우스를 클릭했을때)
  • 특정 상황이 발생했을 때 알리고자 하는 용도 (호출을 의미 + 데이터)
  • 이벤트를 발생시키는 클래스를 "게시자"
  • 이벤트를 받거나 처리하는 클래스를 "구독자"
  • 델리게이트를 기반으로한다. (메서드 호출)
  • 이벤트는 메서든 안에서만 사용가능

 

EVENT 형식(1)

  • 기본 형식

[접근 한정자] event 델리게이트형 이벤트명

delegate void DelegateType(string message);

class A
{
    public event DelegateType EventHandler;

    public void Func(string Message)
    {
        EventHandler(Message);
    }
}

 

예제

using System;
using System.IO;
using System.Collections;

namespace ex
{
    delegate void DelegateType(string message);

    class A
    {
        //EventHandler 선언
        public event DelegateType EventHandler;

        public void Func(string Message)
        {
            //메서드 안에서만 사용가능
            EventHandler(Message);
        }
    }

    class B
    {
        public void PrintA(String Message)
        {
            Console.WriteLine(Message);
        }

        public void PrintB(String Message)
        {
            Console.WriteLine(Message);
        }
    }

    public class Program
    {
        static void Main(string[] args)
        {
            A Test1 = new A();
            B Test2 = new B();

            Test1.EventHandler += new DelegateType(Test2.PrintA);
            Test1.EventHandler += new DelegateType(Test2.PrintB);

            Test1.Func("Good!!!");
            Test1.EventHandler -= Test2.PrintB;
            Test1.Func("Hi~~!");
            Test1.EventHandler -= Test2.PrintA;

            Test1.EventHandler += Test2.PrintA; // 처리기에 추가하기
            Test1.EventHandler += Test2.PrintB;
        }
    }

}

 

이벤트에 메서드 추가 및 삭제

  • +=, -+

객체.이벤트 핸들러 += new 델리게이트형(객체.메서드);

객체.이벤트핸들러 += 객체.메서드1;

객체.이벤트핸들러 += 객체.메서드2;

객체.이벤트핸들러 -= 객체.메서드1;

 

이벤트의 핵심

  • Event handler에 객체의 메서드를 연결
  • Event handler는 객체 메서드에서 호출
  • 이벤트 핸들러를 포함하는 객체 안의 메서드를 통해 다른 객체 또는 같은 객체의 메서드를 호출하기 위한 방법 (같은 데이터 전달)

 

델리게이트와 이벤트 비교

  델리게이트(Delegate) 이벤트(Event)
공통점 객체의 메서드 호출
차이점 delegate로 호출 Event를 포함한 메서드에서 호출
  delegate에 연결 Event handler에 연결
  속성 인덱서
공통점 객체의 멤버 변수를 Read/Write
차이점 변수 배열
728x90
반응형

+ Recent posts