[C#] Event, Delegate 01, 02 – 델리게이트와 이벤트

• Event, Delegate

  • 델리게이트를 선언하고, 등록하고, 사용하는법.

• ExamEventAndDelegate01.cs

/**
 * @file    ExamEventAndDelegate01.cs
 * @brief   델리게이트와 이벤트.
 * @details 델리게이트와 이벤트의 사용 예제.
 * @version  0.0.1
 */
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace StudyCSharp_Bong9
{
    namespace ExamEventAndDelegate01
    {
        /**
         * @brief    델리게이트와 이벤트 예제 클래스.
         * @author   김봉재.
         * @date     2014-08-07
         */
        class ExamEventAndDelegate
        {
            ///@brief 이벤트 핸들러용 델리게이트 선언.
            public delegate void MyEventHandler(string message);

            class Publisher
            {
                ///@brief event 한정자로 수식한 델리게이트의 인스턴스를 선언.
                public event MyEventHandler Active;

                public void DoActive(int number)
                {
                    if (number % 10 == 0)
                    {
                        Active("Active" + number);
                    }
                    else
                    {
                        Console.WriteLine(number);
                    }
                }
            }

            class Subscriber
            {
                static public void MyHandler(string message)
                {
                    Console.WriteLine(message);
                }

                static void Main(string[] args)
                {
                    ///@brief publisher 객체 생성.
                    Publisher publisher = new Publisher();

                    ///@brief publisher 객체에 접근, Active 델리게이트의 인스턴스에 이벤트핸들러 등록(MyHandler).
                    publisher.Active += new MyEventHandler(MyHandler);

                    for (int i = 1; i <span id="mce_SELREST_start" style="overflow:hidden;line-height:0;">&#65279;</span>&lt; 50; i++)
                    {
                        ///@brief 조건에 따라, Active event에 등록되어있는 함수를 델리게이트가 실행.
                        publisher.DoActive(i);
                    }
                }
            }
        }
    }
}

• ExamEventAndDelegate02.cs

/**
 * @file    ExamEventAndDelegate02.cs
 * @brief   델리게이트와 이벤트.
 * @details 델리게이트와 이벤트의 사용 예제.
 * @version  0.0.1
 */
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace StudyCSharp_Bong9
{
    namespace ExamEventAndDelegate02
    {
        /**
         * @brief    델리게이트와 이벤트 예제 클래스.
         * @author   김봉재.
         * @date     2014-08-07
         */
        class ExamEventAndDelegate
        {
            ///@brief 1.델리게이트 선언.
            delegate void MyDelegate(int a);

            class EventManager
            {
                ///@brief 2.델리게이트형식의 이벤트 선언.
                public event MyDelegate eventCall;

                public void NumberCheck(int num)
                {
                    if (num % 2 == 0)
                    {
                        eventCall(num);
                    }
                }
            }

            class MainApp
            {
                ///@brief 3.델리게이트에서 등록되어 사용될 이벤트 함수 작성.
                static void EventNumber(int num)
                {
                    Console.WriteLine("{0}는 짝수", num);
                }

                static void Main(string[] args)
                {
                    ///@brief 4.이벤트메니져 클래스 초기화.
                    EventManager eventManager = new EventManager();

                    ///@brief 5.델리게이트에 사용할 함수를 등록.
                    eventManager.eventCall += new MyDelegate(EventNumber);

                    for (int i = 1; i < 10; i++)
                    {
                        ///@brief 6.이벤트 메니져의 델리게이트에 함수 호출.
                        eventManager.NumberCheck(i);
                    }
                }
            }
        }
    }
}
C#에 게시됨

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google photo

Google의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중

This site uses Akismet to reduce spam. Learn how your comment data is processed.