Step 1: delegate 타입 선언

 C# code

delegate int MyDel(string input); 


위의 선언은 MyDel타입 변수가 integer를 반환하고 파라미터를 string을 갖는 함수들을 가르킵니다.

Step 2: 변수선언하기

deletegate타입을 위해 변수를 정의합니다. C#

MyDel func;


위의 정의는 아래의 int x를 정의하는것과 같습니다.

int x;

그럼 여러분들이 delegate 타입 변수를 만들때 어떤 일이 일어날까요? 간단하게 pointer 타입 변수를 생성합니다. 이 변수는 함수를 가르키지요. c/c++에서는 그러한것들을 함수 pointer라고 합니다.

Step 3: 함수를 변수에 할당하기

이 Step에서는 우리는 간단하게 함수를 변수에 할당합니다. 이러한 작업은 아래의 작업과 같이 inteter x에 5를 할당하는 것과 유사합니다.

x = 5;

C#에서 함수를 변수에 할당하는 방법은 3가지가 있습니다. 그 3가지는  delegate 키워드를 사용하는것  lamda표현식을 사용하는것 그리고 일반적인 방법이 있습니다.  우리는 파라미터로 string을 리턴값으로 받은 string의 length를 리턴할것입니다.

// Assign our variable a new function (created via delegate)
func = delegate(string str) { return str.Length; };

or

// Assign our variable a new function (created via lambda expressions)
func = (str => str.Length);

or

// If the function is declated somewhere else as FunctionFoo
func = FunctionFoo;
// FunctionFoo declared somewhere else as
private int FunctionFoo(string str)
{
     return str.Lenght;
}


Step 4: delegate 변수를 사용하여 함수를 호출하기
이제 함수를 호출할 타임입니다. C#에서 함수를 호출하기 위해서 아래와 같이 2가지 방법으로 호출할수 있습니다.

func("My Input string");


or

func.Invoke("My Input string")

결론: 이번 포스는 매우 간단하지만 매우 중요한 토픽입니다.