반응형
내장 delegate
- Microsoft에서 제공하는 2종류의 내장 delegate가 있다.
- 내장 delegate를 이용해 이벤트 처리 코드를 쉽게 작성할 수 있다.
- 이벤트를 발생시킬때 규칙에 따라 필수 매개변수들을 delegate로 전달해야함
public delegate void EventHandler(object sender, EventArgs e);
public delegate void EventHandler<TEventArgs>(object sender, TEventArgs e);
1) 예시 1 - 리턴값이 없는 이벤트
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace event_programming
{
//This is Subscriber Class
class Program
{
static void Main(string[] args)
{
AddTwoNumbers a = new AddTwoNumbers();
// 이벤트에 딜리게이트 추가
a.ev_OddNumber += EventMessage; // 바로 함수를 추가
a.Add();
Console.Read();
}
// 이벤트 발생시 호출되는 함수
static void EventMessage(object sender, EventArgs e)
{
Console.WriteLine("***Event Executed : This is Odd Number***");
}
}
//This is Publisher Class
class AddTwoNumbers
{
public event EventHandler<EventArgs> ev_OddNumber;
public void Add()
{
int result;
result = 5 + 4;
Console.WriteLine(result.ToString());
// 결과가 홀수인 경우에만 이벤트 동작
if((result % 2 != 0) && (ev_OddNumber != null))
{
ev_OddNumber(this, EventArgs.Empty); // 이벤트 발생
}
}
}
}
2) 예시 2 - 리턴값이 있는 이벤트
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace event_programming
{
class Program
{
static void Main(string[] args)
{
AddTwoNumbers a = new AddTwoNumbers();
a.ev_OddNumber += EventMessage;
a.Add();
Console.Read();
}
static void EventMessage(object sender, OddNumberEventArgs e)
{
Console.WriteLine("Event Executed : {0} is an Odd Number", e.sum);
}
}
public class AddTwoNumbers
{
public event EventHandler<OddNumberEventArgs> ev_OddNumber;
public void Add()
{
int result;
result = 5 + 4;
Console.WriteLine(result.ToString());
if((result % 2 != 0) && (ev_OddNumber != null))
{
ev_OddNumber(this, new OddNumberEventArgs(result)); //Raised Event
}
}
}
// EventArgs를 상속받아 사용자의 클래스 생성
public class OddNumberEventArgs : EventArgs
{
public OddNumberEventArgs(int result)
{
sum = result;
}
public int sum { get; set; }
}
}