관리 메뉴

웹개발자의 기지개

델리게이트 Delegate 연습1 (이벤트) 본문

ASP.NET/C#

델리게이트 Delegate 연습1 (이벤트)

http://portfolio.wonpaper.net 2019. 11. 16. 17:45

C# 에서 이벤트 관련해서 동작을 시킬때 델리게이트라는 개념이 나온다.

델리게이트가 C++ 의 함수포인터와 비스무리 ~~ 보통 이벤트 처리시에 자주 이용된다.

 

대략 개념을 잡아보면


특정 이벤트가 발생하면 이러한 사실을 델리게이트(대리자, 위임자, 대신처리기)를 통하여 원하는 메소드들이 동작하게 하는 방식이다.

 

델리게이트는 같은 return 타입과 매개변수들로 이루어진 메소드(어떤 동작)와 같이 어우러져 있다.

여기서 return 타입이나 매개변수가 다르면 별개의 다른 델리게이트로 취급된다.

 

그리고, 읽고, 달리고, 마시고 등의 다양한 동작들(메소드들)을 하나의 델리게이트로 묶어서 돌릴수가 있다.

물론 특정 동작만 따로 뺄수도 있다.

 

+= 해당 이벤트 메소드 추가

-= 해당 이벤트 메소드 해제

 

일단 예제를 만들어봤다.

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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
namespace DeleLecture2
{
    // delegate 타입 선언
    delegate void DelegateType(string str);
 
    class DelClass
    {
        // 이벤트 변수 선언
        public event DelegateType MyEvent;
        public void Func(string str1)
        {
            if (MyEvent != null
                MyEvent(str1); // 이벤트 발생
        }        
    }
 
    class ExamClass
    {
        public void Print1(string message)
        {
            Console.WriteLine("Print1함수 : " + message);
        }
 
        public void Print2(string message)
        {
            Console.WriteLine("Pring2함수 : " + message);
        }
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            DelClass delClass = new DelClass();
            ExamClass examClass = new ExamClass();
 
            // 이벤트 메소드 추가 등록
            delClass.MyEvent += new DelegateType(examClass.Print1);
            delClass.MyEvent += new DelegateType(examClass.Print2);
 
            // 38, 39 라인과 동일
            // delClass.EventHandler += examClass.Print1;
            // delClass.EventHandler += examClass.Print2;
 
            // Func() 메소드를 이용해서 MyEvent를 임의로 발생시킨다. 
            // 실제 상황에서는 자동적으로 이벤트가 발생된다. 마우스한번클릭, 마우스더블클릭 등등
            delClass.Func("안녕하세요");
 
            // 이벤트 해제
            delClass.MyEvent -= examClass.Print2;
            delClass.Func("Hi ~");           
 
        }
    }
}
cs

 

참고로 공부하면서 활용했던 강좌와 포스팅글도 아래에 남긴다.

[나우캠퍼스] 델리게이트 이벤트

https://www.youtube.com/watch?v=B-yaWp900sQ&t=2150s

 

https://mrw0119.tistory.com/21?category=585887

Comments