hyunjin-dev-log 2021. 12. 24. 22:38
using System;

namespace HelloWorld
{
    class App
    {
        //1.class내부에 event키워드로 대리자형식을 정의한다
        public event EventHandler AnimationCompleteHandler;

        //생성자
        public App()
        {
        }

        public void PlayAnimation()
        {
            for (int i = 0; i < 5; i++)
            {
                Console.WriteLine("애니메이션 실행");
            }
            //이벤트를 발생시킨다
            this.OnAnimationCompleteHandler(EventArgs.Empty);
        }

        //2. protected 와 virtual 키워드를 사용해서 메서드를 만든다
        protected virtual void OnAnimationCompleteHandler(EventArgs e)
            //EventArgs를 매개변수로 받는다
        {
            //3. 정의한 대리자형식의 지역변수를 선언하고 초기화
            EventHandler handler = AnimationCompleteHandler;
            //4. Invoke로 실행
            handler.Invoke(this, e);
        }
    }
}
using System;

namespace HelloWorld
{
    class Program
    {
        static void Main(string[] args)
        {
            App app = new App();
            app.AnimationCompleteHandler += App_AnimationCompleteHandler;
            app.PlayAnimation();
        }

        private static void App_AnimationCompleteHandler(object sender, EventArgs e)
        {
            Console.WriteLine("App_AnimationCompleteHandler: {0}, {1}", sender, e);
        }
    }
}