[C#] Delegate와 Event C# 2012. 2. 23. 10:35

대리자와 이벤트는 종종 많이 쓰인다.

보통 부모와 자식의 관계를 맺고 있거나, 쓰레드를 이용할 경우 필자는 종종 썼다.

예전에 좀 무식하게 부모창으로 넘길 때는 this 키워드를 이용해서 Invoke 하는 방식으로 했는데

혼자서 좀 생각을 해 보니 다음과 같이 해도 될 것 같아 해 보니 동작은 한다.

일단 자식 측에 아래와 같이 코드를 작성해 본다.

public delegate void m_delegate(string msg);
        public event m_delegate m_event;

        public Form2()
        {
            InitializeComponent();          
        }

        private void button1_Click(object sender, EventArgs e)
        {
            m_event("Test");
        }
그리고 부모 측의 코드는 다음과 같다.

private void button1_Click(object sender, EventArgs e)
        {
            Form2 form = new Form2();
            form.m_event += new Form2.m_delegate(event_test);
            form.ShowDialog();
        }

        private void event_test(string msg)
        {
            MessageBox.Show(msg);
        }

부모 측에 보면 자식에 접근하여 그곳의 이벤트를 생성한 것을 알 수가 있다.

그러나 테스트 코드를 짜다보니 결과가 원하는 대로 나오지 않았다.

왜냐.. 자식 측에 어떤 특정한 이벤트가 일어나지 않으면

m_event("Test"); 부분은 작성 할 수가 없었다.(아니면 누군가 보시다 지적 바랍니다.)

혹시나 싶어서 버튼 이벤트를 주고 해 보니 동작했다.

사용 방법마다 조금씩 다르겠지만.. 이 역시 숙지 해 둔다면 좋을 법 하다.

그리고 대리자와 이벤트의 관계를 잘 보면 이벤트는 대리자의 선언 명으로 형식을 지정하는데

이는 이벤트가 대리자를 캡슐화 한다고 생각해도 무방 할 듯 하다.