[c#] 이벤트(event)와 델리게이트(delegate)
이벤트(event)와 델리게이트(delegate)를 함께 알아보겠습니다.
델리게이트 선언
public deleagte void SomeEventHandler(int time);
선언한 델리게이트 인스턴스 선언
public event SomeEventHandler EventHappened;
public void CheckTime(bool isAM, int time)
{
if (isAM)
{
EventHappened(time);
}
}
이벤트 핸들러 만들기.(델리게이트 선언한 매개변수 타입, 개수가 일치하는 메소드로 만들기)
public static void TimeHanlder(int time)
{
Console.WriteLine("오전 {0}시 입니다.", time);
}
이벤트 객체에 핸들러를 등록한다.
static void Main(string[] args)
{
EventHappened += new SomeEventHandler(TimeHanlder);
for(int time = 7; time < 14; time++)
{
if (time < 12) CheckTime(true, time);
else CheckTime(false, time);
}
}
이벤트 발생시 Output
오전 7시 입니다.
오전 8시 입니다.
오전 9시 입니다.
오전 10시 입니다.
오전 11시 입니다.
전체 소스
public deleagte void SomeEventHandler(int time); // 델리게이트 선언
public event SomeEventHandler EventHappened; // 델리게이트 인스턴스를 이벤트한정자로 선언
// 오전만 시간을 알려주는 기능이 있는 메서드
public void CheckTime(bool isAM, int time)
{
if (isAM)
{
EventHappened(time); // 인스턴스에 선언부 매개변수랑 같은 타입의 변수를 넣는다.
}
}
static void Main(string[] args)
{
// 델리게이트 인스턴스에 작성한 이벤트 핸들러를 등록한다.
EventHappened += new SomeEventHandler(TimeHanlder);
for(int time = 7; time < 14; time++)
{
if (time < 12) CheckTime(true, time);
else CheckTime(false, time);
}
}
// 이벤트핸들러. 선안한 델리게이트와 매개변수 개수, 타입 일치해야함.
public static void TimeHanlder(int time)
{
Console.WriteLine("오전 {0}시 입니다.", time);
}