C언어의 함수 포인터에 빗대면 좀 더 쉽게 이해 할 수 있다.
보통 메서드들은 인자로 값이나 주소를 받기 마련인데
델리게이트를 사용하여 메서드의 인자로 메서드를 전달 할 수 있다.
void myrun(delegate mydelegate) {
...
}
이런식으로 말이다.
delegate의 선언은
delegate int mydelegate(string str);
델리게이트를 사용할 때 가장 주의해야하는 점은 인자와 반환타입이다.
델리게이트의 선언문이 앞에 있는 delegate 예약어를 빼면 일반적인 함수 원형 선언과 비슷해보이기 때문에 헷갈릴 수 있지만
델리게이트는 동작할 때 클래스처럼 동작한다.
delegate int MyDel(string s);
int atoi_10(string str) {
foreach (c in str) {
if( Char.IsDigit(c) ) {
throw new System.ArgumentException("Parameter should be Digit!", "original");
}
}
int co = str.Length;
int mask = 1;
int sum;
for(int i = co - 1; i >= 0; i--) {
sum += ( (int)str - 48 ) * mask;
mask *= 10;
}
return sum;
}
static void main(string argv[]) {
MyDel md = new MyDel(atoi_10);
int ret = md.Invoke("123");
Console.WriteLine({ret});
}
이런 식으로 가능함