Délégué Func sans type de retour

Tous les delegates Func renvoient une valeur. Quels sont les delegates .NET qui peuvent être utilisés avec des méthodes qui renvoient un vide?

… ne prend aucun argument et a un type de retour nul?

Je pense que l’ Action est une solution à ce problème.

Tous les delegates 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 n’accepte aucun paramètre et renvoie une valeur. Utilisez Action ou Action lorsque vous ne souhaitez pas retourner une valeur.

Essayez System.Func et System.Action

Vous souhaiterez parfois écrire un délégué pour la gestion des événements, auquel cas vous pourrez tirer parti de System.EvenHandler qui accepte implicitement un argument de type object en plus du second paramètre qui devrait dériver de EventArgs . Les EventHandlers seront void

J’ai personnellement trouvé cela utile lors des tests pour créer un rappel unique dans un corps de fonction.

… ne prend aucun argument et a un type de retour nul?

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

 public delegate void MethodInvoker() 

Un moyen très simple d’invoquer des sous-programmes de valeur de retour et de non-retour. utilise respectivement Func et Action . (voir aussi https://msdn.microsoft.com/en-us/library/018hxwa8(v=vs.110).aspx )

Essayez cet exemple

 using System; public class Program { private Func FunctionPTR = null; private Func FunctionPTR1 = null; private Action ProcedurePTR = null; private ssortingng Display(ssortingng message) { Console.WriteLine(message); return null; } private ssortingng Display(ssortingng message1,ssortingng message2) { Console.WriteLine(message1); Console.WriteLine(message2); return null; } public void ObjectProcess(object param) { if (param == null) { throw new ArgumentNullException("Parameter is null or missing"); } else { Console.WriteLine("Object is valid"); } } public void Main(ssortingng[] args) { FunctionPTR = Display; FunctionPTR1= Display; ProcedurePTR = ObjectProcess; FunctionPTR("Welcome to function pointer sample."); FunctionPTR1("Welcome","This is function pointer sample"); ProcedurePTR(new object()); } }