반응형

델리게이트(delegate)의 문제
- 추가 연산(+=)을 하려고 했는데, 할당 연산(=)을 하는 경우 이전에 추가했던 함수 리스트들이 사라지는 문제
- 외부에서 접근제한이 없다면 함수와 같이 호출이 가능하게 된다.

위와 같은 문제를 해결하기 위해 event를 사용합니다.
이벤트(event)는 외부에서 추가나 차감 연산만 가능합니다.
이벤트(event)는 외부에서 직접 호출이 아닌 함수를 통한 호출을 해야합니다.

 

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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication1
{
    delegate void Print(string strContent);
    class AAA
    {
        public event Print print;
 
        public void DelegatePrintAAA1(string strContent)
        {
            Console.WriteLine("AAA1" + strContent);
        }
        public void DelegatePrintAAA2(string strContent)
        {
            Console.WriteLine("AAA2" + strContent);
        }
        public void DelegatePrintAAA3(string strContent)
        {
            Console.WriteLine("AAA3" + strContent);
        }
 
        public void totalOutput()
        {
            if (this.print != null)
            {
                print("11111");
            }
        }
    }
    class Program
    {
        static void DelegatePrint(string strContent)
        {
            Console.WriteLine("normal" + strContent);
        }
 
        static void Main(string[] args)
        {
            AAA aaa = new AAA();
            aaa.print += aaa.DelegatePrintAAA1;
            aaa.print += aaa.DelegatePrintAAA2;
            //aaa.print = aaa.DelegatePrintAAA3; error 발생
            //aaa.print("111111"); error 발생
            aaa.totalOutput();
 
            aaa.print -= aaa.DelegatePrintAAA1;
            aaa.totalOutput();
        }
    }
}
 
 
 

이 예제에서 확인해봤을때 할당 연산이나 직접호출은 불가능합니다.

반응형

'개발공부 > C#' 카테고리의 다른 글

[C#] 제네릭  (0) 2019.10.19
[C#] 인덱서(Indexer)  (0) 2019.10.18
[C#] delegate  (0) 2019.10.16
[C#] Event  (0) 2019.10.15
[C#] yield  (0) 2019.10.14

+ Recent posts