728x90
반응형
윈도우 프로그램을 작성할때 메세지에 따라 동작하게 하는데 여기서 이벤트의 의미가 중요하다.
EVENT 의미
- (특히 중요한) 사건 (ex. 사용자가 마우스를 클릭했을때)
- 특정 상황이 발생했을 때 알리고자 하는 용도 (호출을 의미 + 데이터)
- 이벤트를 발생시키는 클래스를 "게시자"
- 이벤트를 받거나 처리하는 클래스를 "구독자"
- 델리게이트를 기반으로한다. (메서드 호출)
- 이벤트는 메서든 안에서만 사용가능
EVENT 형식(1)
- 기본 형식
[접근 한정자] event 델리게이트형 이벤트명
delegate void DelegateType(string message);
class A
{
public event DelegateType EventHandler;
public void Func(string Message)
{
EventHandler(Message);
}
}
예제
using System;
using System.IO;
using System.Collections;
namespace ex
{
delegate void DelegateType(string message);
class A
{
//EventHandler 선언
public event DelegateType EventHandler;
public void Func(string Message)
{
//메서드 안에서만 사용가능
EventHandler(Message);
}
}
class B
{
public void PrintA(String Message)
{
Console.WriteLine(Message);
}
public void PrintB(String Message)
{
Console.WriteLine(Message);
}
}
public class Program
{
static void Main(string[] args)
{
A Test1 = new A();
B Test2 = new B();
Test1.EventHandler += new DelegateType(Test2.PrintA);
Test1.EventHandler += new DelegateType(Test2.PrintB);
Test1.Func("Good!!!");
Test1.EventHandler -= Test2.PrintB;
Test1.Func("Hi~~!");
Test1.EventHandler -= Test2.PrintA;
Test1.EventHandler += Test2.PrintA; // 처리기에 추가하기
Test1.EventHandler += Test2.PrintB;
}
}
}
이벤트에 메서드 추가 및 삭제
- +=, -+
객체.이벤트 핸들러 += new 델리게이트형(객체.메서드);
객체.이벤트핸들러 += 객체.메서드1;
객체.이벤트핸들러 += 객체.메서드2;
객체.이벤트핸들러 -= 객체.메서드1;
이벤트의 핵심
- Event handler에 객체의 메서드를 연결
- Event handler는 객체 메서드에서 호출
- 이벤트 핸들러를 포함하는 객체 안의 메서드를 통해 다른 객체 또는 같은 객체의 메서드를 호출하기 위한 방법 (같은 데이터 전달)
델리게이트와 이벤트 비교
델리게이트(Delegate) | 이벤트(Event) | |
공통점 | 객체의 메서드 호출 | |
차이점 | delegate로 호출 | Event를 포함한 메서드에서 호출 |
delegate에 연결 | Event handler에 연결 |
속성 | 인덱서 | |
공통점 | 객체의 멤버 변수를 Read/Write | |
차이점 | 변수 | 배열 |
728x90
반응형
'C# > C#으로 살아남기_나우캠퍼스_이태성강사' 카테고리의 다른 글
[C# 언어 12강] Override와 Overload (0) | 2022.01.03 |
---|---|
[C# 언어 12강] 상속(Inheritance) (0) | 2021.12.31 |
[C# 언어 11강] 델리게이트(Delegate) (0) | 2021.12.30 |
[C# 언어 10강] 배열/속성/인덱서 비교 (0) | 2021.12.30 |
[C# 언어 9강] 인덱서(Indexer) (0) | 2021.12.29 |