답변:
Predicate
본질적으로 Func<T, bool>
; "지정된 인수가 대리인이 나타내는 조건을 만족합니까?"라는 질문을합니다. List.FindAll과 같은 것들에서 사용됩니다.
Action
: 인수가 주어지면 조치를 수행하십시오. 매우 일반적인 목적입니다. 기본적으로 부작용을 의미하므로 LINQ에서는 많이 사용되지 않습니다.
Func
: LINQ에서 광범위하게 사용 되며 일반적으로 인수를 복잡한 구조를 하나의 속성으로 투영하여 인수를 변환합니다.
다른 중요한 대의원 :
EventHandler
/ EventHandler<T>
: WinForms 전체에서 사용
Comparison<T>
: IComparer<T>
대표적 형태로.
EventHandler/EventHandler<T>
WinForms 외부에도 나타납니다.
Action
, Func
그리고 Predicate
모든 위임 가족에 속한다.
Action
: 조치는 n 개의 입력 매개 변수를 사용할 수 있지만 void를 리턴합니다.
Func
: Func는 n 개의 입력 매개 변수를 사용할 수 있지만 항상 제공된 유형의 결과를 반환합니다. Func<T1,T2,T3,TResult>
여기서 T1, T2, T3은 입력 매개 변수이고 TResult는 그 출력입니다.
Predicate
: 술어도 Func의 한 형태이지만 항상 bool을 리턴합니다. 간단히 말해서 그것은 래퍼입니다 Func<T,bool>
.
MethodInvoker는 WinForms 개발자가 사용할 수있는 것입니다. 인수를 허용하지 않으며 결과를 반환하지 않습니다. BeginInvoke () 등은 형식화되지 않은 델리게이트를 허용하므로 Action보다 우선하며 UI 스레드를 호출 할 때 여전히 자주 사용됩니다. 비록 행동도 마찬가지입니다.
myForm.BeginInvoke((MethodInvoker)delegate
{
MessageBox.Show("Hello, world...");
});
또한 ThreadStart 및 ParameterizedThreadStart도 알고 있습니다. 다시 대부분의 사람들은 요즘 행동을 대체 할 것입니다.
조건 자, 기능 및 동작은 .NET의 기본 제공 위임 인스턴스입니다. 이러한 각 델리게이트 인스턴스는 특정 서명이있는 사용자 메소드를 참조하거나 가리킬 수 있습니다.
작업 대리자-작업 대리자 인스턴스는 인수를 사용하고 void를 반환하는 메서드를 가리킬 수 있습니다.
Func 대리자-Func 대리자 인스턴스는 가변 개수의 인수를 사용하고 일부 유형을 반환하는 메서드를 가리킬 수 있습니다.
술어-술어는 func 대리자 인스턴스와 유사하며 가변 개수의 인수를 사용하고 부울 유형을 리턴하는 메소드를 가리킬 수 있습니다.
Func는 LINQ에 더 친숙하며 매개 변수로 전달 될 수 있습니다. (포인트 프리)
술어를 다시 랩핑 할 수 없습니다.
Predicate<int> IsPositivePred = i => i > 0;
Func<int,bool> IsPositiveFunc = i => i > 0;
new []{2,-4}.Where(i=>IsPositivePred(i)); //Wrap again
new []{2,-4}.Where(IsPositivePred); //Compile Error
new []{2,-4}.Where(IsPositiveFunc); //Func as Parameter
인수와 각 유형을 바꾸는 것에 대한 간단한 예
이 Func은 두 개의 int 인자를 받아서 int를 반환합니다.
Func<int, int, int> sum = (a, b) => a + b;
Console.WriteLine(sum(3, 5));//Print 8
이 경우 func에는 인수가 없지만 문자열을 반환합니다.
Func<string> print = () => "Hello world";
Console.WriteLine(print());//Print Hello world
이 조치는 두 개의 int 인수를 사용하여 void를 리턴합니다.
Action<int, int> displayInput = (x, y) => Console.WriteLine("First number is :" + x + " , Second number is "+ y);
displayInput(4, 6); //Print First number is :4 , Second number is :6
이 술어는 하나의 인수를 취하고 항상 bool을 리턴합니다. 일반적으로 술어는 항상 bool을 리턴합니다.
Predicate<int> isPositive = (x) => x > 0;
Console.WriteLine(isPositive(5));//Print True
System.Converter<TInput, TOutput>
이 거의 사용되지 비록.