Quelqu'un peut-il fournir une bonne explication (avec des exemples, si possible) de ces 3 délégués les plus importants ?
- Prédicat
- Action
- Func
Quelqu'un peut-il fournir une bonne explication (avec des exemples, si possible) de ces 3 délégués les plus importants ?
Predicate
: essentiellement Func<T, bool>
; pose la question "l'argument spécifié satisfait-il la condition représentée par le délégué ?". Utilisé dans des choses comme List.FindAll.
Action
: Effectuer une action en fonction des arguments. Usage très général. Pas beaucoup utilisé dans LINQ car il implique des effets de bord, fondamentalement.
Func
: Occasion de manière extensive dans LINQ, généralement pour transformer l'argument, par exemple en projetant une structure complexe sur une seule propriété.
Autres délégués importants :
EventHandler
/ EventHandler<T>
: Utilisé partout dans WinForms
Comparison<T>
: Comme IComparer<T>
mais sous forme de délégation.
Le convertisseur est un délégué utile lorsqu'il est nécessaire de convertir de nombreux modèles en classes d'entreprise, c'est-à-dire stum.de/2009/12/23/
Action
, Func
y Predicate
appartiennent tous à la famille des délégués.
Action
: L'action peut prendre n paramètres d'entrée mais elle retourne void.
Func
: Func peut prendre n paramètres d'entrée mais il retournera toujours le résultat du type fourni. Func<T1,T2,T3,TResult>
où T1, T2, T3 sont des paramètres d'entrée et TResult est la sortie de ce système.
Predicate
: Predicate est aussi une forme de Func mais il retournera toujours un bool. En termes simples, il s'agit d'une enveloppe de Func<T,bool>
.
Un exemple simple sur les arguments et le retour de chaque type.
Ce Func prend deux arguments int et retourne un int.Func a toujours un type de retour
Func<int, int, int> sum = (a, b) => a + b;
Console.WriteLine(sum(3, 5));//Print 8
Dans ce cas, func n'a pas d'arguments mais retourne une chaîne de caractères.
Func<string> print = () => "Hello world";
Console.WriteLine(print());//Print Hello world
Cette action prend deux arguments int et retourne 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
Ce prédicat prend un argument et renvoie toujours un bool.généralement les prédicats renvoient toujours un bool.
Predicate<int> isPositive = (x) => x > 0;
Console.WriteLine(isPositive(5));//Print True
MethodInvoker est une méthode que les développeurs WinForms peuvent utiliser ; elle n'accepte aucun argument et ne renvoie aucun résultat. Il est antérieur à Action, et est encore souvent utilisé pour invoquer le thread de l'interface utilisateur puisque BeginInvoke() et al acceptent un Delegate non typé ; bien que Action fasse tout aussi bien l'affaire.
myForm.BeginInvoke((MethodInvoker)delegate
{
MessageBox.Show("Hello, world...");
});
Je suis également conscient de l'existence de ThreadStart et de ParameterizedThreadStart ; là encore, la plupart des gens substituent une Action de nos jours.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.