클래스에서 이벤트 처리가 필요한 경우
(클래스 내에서 특정 조건 도달, 상태 변화 시 이를 외부에 알리고 싶은 경우)

이벤트 등록을 위한 이벤트 헨들러 함수 등록

        public event EventHandler myEventHandler ;

외부에서는 이 이벤트 핸들러(myEvnetHandler)에 이벤트 발생 시 동작할 함수를 연결
(EventGenerator은 myEventHandler를 멤버로 가지는 클래스,
EventFunc은 myEventHandler가 실행될 때 호출될 함수)

            EventGenerator gen = new EventGenerator ();
            gen.myEventHandler += EventFunc;

            static void EventFunc(object sender, EventArgs arg)
            {
                        Console.Write("EventFunc hit\n");
            }

EventGenerator 내에서 myEventHandler 호출(이벤트를 발생) 시키는 코드를 만나면,
이를 EventFunc에게 전달하고, EventFunc함수가 실행된다. 
아래 코드에선 EventGenerator클래스의 Run() 호출 시 이벤트가 발생

        class EventGenerator {
                public event EventHandler myEventHandler; 
                public void Run() {
                            myEventHandler(this, new EventArgs());
                }
        }

 

만약 단순 이벤트 발생 정보 외에 특정 값을 전달하고 싶은 경우
적절한 EventArgs 를 정의해야 됨.

        class myEventArgs : EventArgs // 콜백 값을 담는 클래스 정의
        {
                public int num;
                public myEventArgs(int num) {
                            this.num = num;
                }
        }

위의 이벤트핸드러 호출 부분에 정의한 EventArgs를 넣어서 호출(생성)하면 됨.

        class EventGenerator {
                public event EventHandler myEventHandler; 
                public void Run() { 
                            myEventHandler(this, new myEventArgs(int)); 
                }
        }

이벤트를 전달 받는 함수에서 EventArgs를

        static void EventFunc(object sender, myEventHandlerarg arg) 
        { 
                Console.Write( (arg as myEventHandlerarg).num );
        }

별도 EventArgs까지 정의할 필요가 없는 경우 EventHandler 에 직접 return type를 정의할 수 있다.

        public event EventHandler<T> myEventHandler;  

        static void EventFunc(object sender, <T> arg) 
        { 
                Console.Write( arg );
        }

'Part 3 > ¶ C#(C sharp)' 카테고리의 다른 글

UI 접근  (0) 2020.03.15
C# 2.0  (0) 2018.09.14
C# 버전 특징  (0) 2018.09.14
AND