익명 메서드는 이름이 없는 메서드입니다.
델리게이트를 선언하고 델리게이트의 인스턴스가 익명 메서드를 참조시키면
델리게이트의 인스턴스를 호출하면 참조하고 있던 익명 메서드를 실행할 수 있습니다.
delegate int Calculate(int a, int b);
public static void Main()
{
Calculate Calc;
Calc = delegate(int a, int b)
{
return a + b;
};
Console.WriteLine("3 + 4: {0}", Calc(3,4));
}
익명 메서드는 delegate 키워드를 사용하여 선언합니다.
델리게이트 인스턴스 = delegate(매개변수 목록)
{
// 실행 코드
}
익명 메서드는 참조할 델리게이트의 형식과 동일한 형식으로 선언되어야 합니다.
익명 메서드 예제
using System;
namespace AnonymousMethod
{
delegate int Compare(int a, int b);
class Program
{
static void BubbleSort(int[] DataSet, Compare Comparer)
{
int i = 0;
int j = 0;
int temp = 0;
for (i = 0; i < DataSet.Length - 1; i++)
{
for (j = 0; j < DataSet.Length - (i + 1); j++)
{
if (Comparer(DataSet[j], DataSet[j + 1]) > 0)
{
temp = DataSet[j + 1];
DataSet[j + 1] = DataSet[j];
DataSet[j] = temp;
}
}
}
}
static void Main(string[] args)
{
int[] array = { 3, 7, 4, 2, 10 };
Console.WriteLine("Sorting ascending");
BubbleSort(array, delegate (int a, int b)
{
if (a > b)
return 1;
else if (a == b)
return 0;
else
return -1;
});
for (int i = 0; i < array.Length; i++)
Console.Write("{0} ", array[i]);
int[] array2 = { 7, 2, 8, 10, 11 };
Console.WriteLine("\nSorting descending");
BubbleSort(array2, delegate(int a, int b)
{
if (a < b)
return 1;
else if (a == b)
return 0;
else
return -1;
});
for (int i = 0; i < array2.Length; i++)
Console.Write("{0} ", array2[i]);
Console.WriteLine();
}
}
}
익명 메서드 예제
using System;
namespace Ex13_1
{
delegate int MyDelegate(int a, int b);
class Program
{
static void Main(string[] args)
{
MyDelegate Callback;
Callback = delegate (int a, int b)
{
return a + b;
};
Console.WriteLine(Callback(3,4));
Callback = delegate (int a, int b)
{
return a - b;
};
Console.WriteLine(Callback(7, 5));
}
}
}