본문 바로가기
프로그래밍/c#

[c#] 이벤트(event)와 델리게이트(delegate)

by 그래도동 2019. 10. 8.
728x90
반응형

이벤트(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); 
}

728x90
반응형

댓글