델리게이트란
메서드를 참조할 수 있는 타입으로, 함수를 변수처럼 저장하고 전달하는게 가능하다.
주로 실행할 메서드를 나중에 결정할 때 사용하며 이벤트 시스템 구현의 기반이 된다.
namespace DelegateTest
{
class Program
{
// 델리게이트 선언
public delegate void TestDelegate(string name);
// 델리게이트와 연결될 함수들
static void TestHello(string name)
{
Console.WriteLine("Hello " + name);
}
static void TestHi(string name)
{
Console.WriteLine("Hi " + name);
}
static void Main(string[] args)
{
Console.Write("입력 (hello / hi): ");
string input = Console.ReadLine();
// 델리게이트 선언
TestDelegate t;
// 조건에 따라 연결
if (input == "hello")
{
t = TestHello;
}
else if (input == "hi")
{
t = TestHi;
}
else
{
Console.WriteLine("알 수 없는 입력입니다.");
return;
}
// 실행
t("lsy"); // 원하는 이름 넣기
}
}
}
이벤트란
이벤트가 발생했을 때 실행되도록 등록된 함수 목록이며,
외부에서 직접 실행하지 못하게 막아놓은 델리게이트로 이벤트를 선언한 클래스 내에서만 이벤트를 발생시킬 수 있다.
class Program
{
// 이벤트 델리게이트 정의
public delegate void SimpleEvent();
// 이벤트 선언
public static event SimpleEvent OnEvent;
static void Main()
{
// 이벤트에 함수 등록
OnEvent += React;
// 이벤트 발생시키기
Console.WriteLine("이벤트 발생 전...");
OnEvent?.Invoke();
}
// 이벤트에 반응하는 함수
static void React()
{
Console.WriteLine("이벤트 감지됨");
}
}