본문 바로가기

C#

C# 이름이 없는 델리게이트 Anonymous Delegate 이거 어떻게 사용하는지 알려드립니다.

반응형

말 그대로 이름이 없는 델리게이트다 

이는 자주 사용하지 않는 델리게이트 메소드를 대신할 때 사용 한다. 

한 두번 밖에 쓰지 않으면 바록 작성해 주는게 코드 리딩에 용이하기 때문이다. 

이 델리게이트 메서드를 따로 생성하지 않고 

델리게이트 변수를 선언하고 익명의 델리게이트를 Count 메서드에서 바로 작성해주면 된다.

 

Count 메서드의 return 값은 int 형 타입니다. 

int 형 변수를 선언하여 Count 메서드의 리턴 값을 받아 준다. 

memberTest 자리에 익명의 델리게이트를 넣어준다.

익숙하지 않아 어려울 수 있지만 델리게이트에서 이름만 없고 이름 없어서 내용을 채워준다고 생각하면된다.

 

delegate(int a) {return a % 2 ==0;}

delegate(int a) {return a % 2 !=0;}

 

이름이 없으니까 누군지 모르니까 줄줄이 풀어서 머하는 놈인지 설명해준다 !

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp7
{
    class Program
    {
        delegate bool MemberTest(int a);
        static void Main(string[] args)
        {

            var arr = new[] { 3, 34, 6, 34, 23, 5, 23, 6, 23, 346, 2 };
            //익명 델리게이트!
            
            int even = Count(arr, delegate (int a) { return a % 2 == 0; });
           
            int odd  = Count(arr, delegate (int a) { return a % 2 != 0; });

            Console.WriteLine("짝수" + even);
            Console.WriteLine("홀수" + odd);
        }
        static int Count(int[] a , MemberTest memberTest)
        {
            int count = 0;
            foreach (var item in a)
            {
                if (memberTest(item) == true)
                {
                    count++;
                }
            }
            return count;
        }
        //public static bool IsODD(int A) { return A % 2 != 0; }
        //public static bool IsEVEN(int A) { return A % 2 == 0; }
    }
}

Func 델리케이트로 더욱 간단하게 만들 수 있다.

Func<int , bool> func 

이는 int 변수를 받아 bool 값을 반환한다는 캡슐역할을 말한다.  

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApp8
{
    class Program
    {
        //delegate bool MemberTest(int a); = Func<int,bool> func
        //Func 와 Action은 .NET에서 미리 선언해 둔 델리게이트 입니다. 
        static void Main(string[] args)
        {
            var a = new[] { 1, 2, 3, 4, 5,34,52,34,345,134,34,325,23,42,356 };
            int odd = Count(a, delegate (int x) { return x % 2 != 0; });
            int even = Count(a, delegate (int x) { return x % 2 == 0; });
        }
        static int Count(int[] a , Func<int,bool> func)
        {
            int count = 0;
            foreach ( var item in a)
            {
                if (func(item))
                {
                    count++;
                }
            }
            return count;
        }
    }
}
반응형