본문 바로가기
개발/기본) 기본기

기본기)Event Handler 대리자

by 테샤르 2021. 9. 26.

EventHandler 대리자

이벤트 데이터가 없는 이벤트를 처리할 메서드를 만들때 사용한다.

어떤 이벤트를 처리하는 메서드를 만들때 사용하는 형태로 

 += 를 통해서 Event를 등록한다.

 

하단의 예제는 임계점을 설정후 a버튼에 대한 제한 처리를 하는 로직이다.

using System;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Counter c = new Counter(new Random().Next(10));
            c.ThresholdReached += c_ThresholdReached;

            Console.WriteLine("press 'a' key to increase total");
            while (Console.ReadKey(true).KeyChar == 'a')
            {
                Console.WriteLine("adding one");
                c.Add(1);
            }
        }

        static void c_ThresholdReached(object sender, ThresholdReachedEventArgs e)
        {
            Console.WriteLine("The threshold of {0} was reached at {1}.", e.Threshold,  e.TimeReached);
            Environment.Exit(0);
        }
    }

    class Counter
    {
        private int threshold;
        private int total;

        public Counter(int passedThreshold)
        {
            threshold = passedThreshold;
        }

        public void Add(int x)
        {
            total += x;
            if (total >= threshold)
            {
                ThresholdReachedEventArgs args = new ThresholdReachedEventArgs();
                args.Threshold = threshold;
                args.TimeReached = DateTime.Now;
                OnThresholdReached(args);
            }
        }

        protected virtual void OnThresholdReached(ThresholdReachedEventArgs e)
        {
            EventHandler<ThresholdReachedEventArgs> handler = ThresholdReached;
            if (handler != null)
            {
                handler(this, e);
            }
        }

        public event EventHandler<ThresholdReachedEventArgs> ThresholdReached;
    }

    public class ThresholdReachedEventArgs : EventArgs
    {
        public int Threshold { get; set; }
        public DateTime TimeReached { get; set; }
    }
}

이벤트를 만들때 위와 같은 형태로 구현을 하면 된다.

 

Microsoft EventHandler : [링크]

 

EventHandler 대리자 (System)

이벤트 데이터가 없는 이벤트를 처리할 메서드를 나타냅니다.Represents the method that will handle an event that has no event data.

docs.microsoft.com

Microsoft EventArgs Class : [링크]

 

EventArgs 클래스 (System)

이벤트 데이터를 포함하는 클래스의 기본 클래스를 나타내며 이벤트 데이터를 포함하지 않는 이벤트에 사용할 값을 제공합니다.Represents the base class for classes that contain event data, and provides a value t

docs.microsoft.com

 

★☆☆☆☆

 

반응형

댓글