대리인의 인스턴스를 만드는 것이 무엇인지 궁금합니다. 나는 그들이 함수 포인터라는 것을 알고 있지만 위임 인스턴스를 사용하는 목적은 무엇입니까? 항상 람다를 사용하는 말인가 첫번째 생각에서대리인 인스턴스 대 함수 전달 직접
public delegate bool IsEven(int x);
class Program
{
static void Main(string[] args)
{
int[] nums = new int[] { 1, 3, 4, 5, 6,7, 8, 9 };
// creating an instance of delegate and making it point to 'CheckEven' function
IsEven isEven = new IsEven(CheckEven);
// using delegate for parameter to get sum of evens
int tot1 = Sums(nums, isEven);
// passing in the function directly as parameter and not delegate instance
int tot2 = Sums(nums, CheckEven);
// using lambda expressions
int tot3 = Sums(nums, x=> x%2==0);
ReadKey();
}
public static int Sums(int[] nums, IsEven isEvenOdd)
{
int sum = 0;
foreach(int x in nums)
{
if (isEvenOdd(x))
sum += x;
}
return sum;
}
public static bool CheckEven(int x)
{
if (x % 2 == 0)
return true;
else
return false;
}
}
는 복잡한 구현이없는 전달할 것 기능의 기능 그렇지 않으면 왜 그냥 직접 내 기능을 통과하지 않는다면 좋은 생각처럼 보인다 매개 변수? 또한 람다 (Lambdas)를 사용하면 대표자들과 같이 새로운 방법을 만드는 것에 반대하여 확률의 합을 계산하는 것이 훨씬 쉽습니다.
_ "매개 변수로 메소드를 직접 사용하는 것이 무엇입니까?"- 위에서 게시 한 코드를 컴파일 했습니까? 그것이 있어야하고, 그렇게 할 때 분명히 그 질문에 "아무것도"대답하지 않아야합니다. 그것은 효과가 있었기 때문에 아무것도 멈추지 않았습니다. 솔직히 말해서, 당신이 무엇을 요구하고 있는지 명확하지 않습니다. –
여러분의 질문은 주로 의견을 바탕으로 한 것이지만, new 연산자를 사용하든 메서드 이름을 제공하든 똑같은 일이 발생한다는 것을 이미 알고 있다고 가정합니다. 새 대리자 인스턴스가 생성됩니다. 후자는 컴파일러가'새로운 IsEven (CheckEven)'을 채워서 암묵적으로 그렇게합니다. 이해할 수 없다면 사용 가능한 문서를 읽는 데 집중해야합니다. 여기에 질문이 너무 광범위 할 수 있으므로 (프로그래밍 언어의 작동 방식에 대한 자습서를 제공하는 곳이 아닙니다.) –
나는 델리게이트 인스턴스를 사용하는 것이 무엇인지 물어봐야한다고 생각한다. – Cosmik11