/*
C# 언어 대리자 개념은 최고 수준의 언어 지원 및 해당 개념 관련 형식 안정성을 제공합니다.
함수 포인터는 호출 규칙을 더욱 세부적으로 제어해야 하는 유사한 시나리오용으로 C# 9에 추가되었습니다. 
대리자와 연결된 코드는 대리자 형식에 추가된 가상 메서드를 사용하여 호출됩니다.
*/

/*----------------------------------------------------------------------------------
>>대리자

1.  ElapsedEventHandler 대리자
1.1 public delegate void ElapsedEventHandler(object sender, ElapsedEventArgs e);

>>대리자 호출

1.  Timer.Elapsed 이벤트
1.1 public event System.Timers.ElapsedEventHandler Elapsed;
----------------------------------------------------------------------------------*/


c# 객체지향 언어이긴 하지만 함수지향형 언어가 갖는 특징을 갖기도 합니다.
이를테면 c언어의 함수 포인터에 해당하는 기능이 c#에도 있다는 겁니다.
오히려, c언어의 함수포인터보다 기능이 더 강화되었습니다.

1. 대리자(Delegate)

c# 초기 버젼부터 있던 기능입니다. c언어의 함수포인터를 그대로 차용한거나 다름없습니다.
메소드의 위치를 간직하고 있으면서, 그 메서드를 실행해 주는 역할을 합니다.

Ex)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace TEST
{
class Program
{
delegate void DelegateMethod(int a);

static void method1(int a){Console.WriteLine("method1 called!! a = {0}", ++a);}
static void method2(int a){Console.WriteLine("method2 called!! a = {0}", ++a);}
static void method3(int a){Console.WriteLine("method3 called!! a = {0}", ++a);}
static void method4(int a){Console.WriteLine("method4 called!! a = {0}", ++a);}
static void method5(int a){Console.WriteLine("method5 called!! a = {0}", ++a);}
static void method6(int a){Console.WriteLine("method6 called!! a = {0}", ++a);}
static void method7(int a){Console.WriteLine("method7 called!! a = {0}", ++a);}
static void method8(int a){Console.WriteLine("method8 called!! a = {0}", ++a);}
static void method9(int a){Console.WriteLine("method9 called!! a = {0}", ++a);}

static void Main()
{
DelegateMethod method = null;

method += method1;
method += method2;
method += method3;
method += method4;
method += method5;
method += method6;
method += method7;
method += method8;
method += method9;

method(0);
}
}
}


결과) 동시에 실행이 된다고 볼수 있다. a의 값을 주목

D:\tmp\console>sample.exe
method1 called!! a = 1
method2 called!! a = 1
method3 called!! a = 1
method4 called!! a = 1
method5 called!! a = 1
method6 called!! a = 1
method7 called!! a = 1
method8 called!! a = 1
method9 called!! a = 1
D:\tmp\console>

+ Recent posts