카테고리 없음

C# 델리게이트 4 - 익명 메서드

나노콛 2019. 8. 8. 16:08

익명 메서드는 이름이 없는 메서드입니다.

델리게이트를 선언하고 델리게이트의 인스턴스가 익명 메서드를 참조시키면
델리게이트의 인스턴스를 호출하면 참조하고 있던 익명 메서드를 실행할 수 있습니다.

 

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));
        }
    }
}

728x90