C#
C# 이름이 없는 델리게이트 Anonymous Delegate 이거 어떻게 사용하는지 알려드립니다.
이준호
2023. 3. 13. 08:59
반응형
말 그대로 이름이 없는 델리게이트다
이는 자주 사용하지 않는 델리게이트 메소드를 대신할 때 사용 한다.
한 두번 밖에 쓰지 않으면 바록 작성해 주는게 코드 리딩에 용이하기 때문이다.
이 델리게이트 메서드를 따로 생성하지 않고
델리게이트 변수를 선언하고 익명의 델리게이트를 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;
}
}
}
반응형