web-dev-qa-db-fra.com

Délégué Func sans type de retour

Tous les délégués Func renvoient une valeur. Quels sont les délégués .NET pouvant être utilisés avec des méthodes qui renvoient void?

482
Marcel Lamothe

Tous les délégués Func retournent quelque chose. tous les délégués d'Action retournent nuls.

Func<TResult> ne prend aucun argument et retourne TResult:

public delegate TResult Func<TResult>()

Action<T> prend un argument et ne renvoie pas de valeur:

public delegate void Action<T>(T obj)

Action est le délégué le plus simple, "nu":

public delegate void Action()

Il y a aussi Func<TArg1, TResult> et Action<TArg1, TArg2> (et d'autres jusqu'à 16 arguments). Tous ces éléments (à l'exception de Action<T>) sont nouveaux dans .NET 3.5 (défini dans System.Core).

654
Jason

... ne prend pas d'argument et a un type de retour vide?

Je crois que Action est une solution à cela.

64
Marcel Lamothe

Tous les délégués Func prennent au moins un paramètre

Ce n'est pas vrai. Ils prennent tous au moins un argument de type, mais cet argument détermine le type de retour. 

Donc, Func<T> n'accepte aucun paramètre et retourne une valeur. Utilisez Action ou Action<T> lorsque vous ne souhaitez pas renvoyer de valeur.

44
Joel Coehoorn

Essayez System.Func<T> et System.Action

26
JaredPar

Parfois, vous voudrez écrire un délégué pour la gestion des événements. Dans ce cas, vous pourrez tirer parti de System.EvenHandler<T> qui accepte implicitement un argument de type object en plus du deuxième paramètre qui doit dériver de EventArgs . Les gestionnaires d'événements renverront void

J'ai personnellement trouvé cela utile lors des tests pour la création d'un rappel ponctuel dans un corps de fonction.

0
AndyG

... ne prend pas d'argument et a un type de retour vide?

Si vous écrivez pour System.Windows.Forms, vous pouvez également utiliser: 

public delegate void MethodInvoker()
0
mojmir.novak