반응형
델리게이트(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 |