White Whale Studio

EventArgs 본문

IT Engineering/C#.net

EventArgs

glorymind 2016. 6. 23. 11:08
반응형

Delegate에 대한 내용을 찾다가 Event를 찾게되고;;; 좀더 상세하게 파보다보니 여기까지왔네요.

관련된 내용부터 해서 최종적으로는 Delegate와 Event를 알아보겠습니다.


EventArgs (Event Arguments) : 이벤트에 사용되는 데이터를 저장하기 위해 참조하는 기본 클래스입니다.

MSDN의 설명을 보면

이 클래스에는 이벤트 데이터가 없으므로 이벤트가 발생할 때 이벤트 처리기에 대한 상태 정보를 전달하지 않는 이벤트에서 사용됩니다. 이벤트 처리기에 상태 정보가 필요한 경우, 응용 프로그램에서는 이 클래스에서 클래스를 파생시켜 해당 데이터를 보관해야 합니다.


This class contains no event data; it is used by events that do not pass state information to an event handler when an event is raised.


즉, Base가 되는 EventArgs에는 이벤트 데이터가 없고, 필요에 따라서 추가 데이터를 전달할 필요가 있다면 EventArgs를 상속해서 만들어 사용하면 된다는 이야기입니다. 빨간 글씨부분을 주목해주세요.


1
2
3
4
5
6
7
8
/// <summary>
    /// 이벤트 매개인자로 사용하기 위한 클래스
    /// </summary>
    public class MyEventArgs : EventArgs
    {
        public int intParam { get; set; }
        public String stringParam { get; set; }        
    }

cs


위에서는 간단하게 작성을 해보았습니다.

MyEventArgs 클래스는 EventArgs를 상속받고 Property를 사용하여 추가적인 이벤트 데이터를 설정하였습니다.

말하자면 intParam과 stringParam가 이벤트 데이터 인것입니다. 


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
    public class EventClass 
    {
 
        public delegate void MyEventHandler(int a, int b, MyEventArgs mea);
        public event MyEventHandler someEvent;
        public event EventHandler normalEvent;
 
        public void RaiseEvent()
        {
            try
            {
                if (someEvent != null)
                {
                    MyEventArgs mea = new MyEventArgs();
                    mea.intParam = 3;
                    mea.stringParam = "Test";                    
                    normalEvent(this, mea);
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message.ToString());
            }
        }
    }
cs


실사용 예를 볼까요.

4번 라인에서 처럼 delegate로 EventHandler를 만들어서 직접 설정해주는 방법이 있고

일반적인 event를 선언해서 바로 넘기는 방법도 있습니다.(17번 라인)

어차피 MyEventArgs가 Base인 EventArgs를 상속받으니까 당연히 가능한 거겠죠?


위의 코드에 나온 Delegate나 Event에 관한 이야기는 한꺼번에 하기에는 많은 내용이라 

포스팅을 나누어서 진행하겠습니다.

반응형
Comments