J'ai écrit une fonction en C# qui fait une différenciation numérique. Il ressemble à ceci:C# Passing Function as Argument
public double Diff(double x)
{
double h = 0.0000001;
return (Function(x + h) - Function(x))/h;
}
Je voudrais pouvoir passer dans toutes les fonctions, comme dans:
public double Diff(double x, function f)
{
double h = 0.0000001;
return (f(x + h) - f(x))/h;
}
Je pense que cela est possible avec les délégués (?) Peut-être, mais je ne suis pas sûr comment les utiliser.
Toute aide serait grandement apprécié.
En 3.5 et plus tard, les Func <> s et les délégués sont interchangeables, ce qui signifie que les délégués anonymes et les lambdas (qui sont du sucre syntaxique pour les délégués anonymes) peuvent également être utilisés. Donc, cela n'a pas vraiment d'importance si vous spécifiez le paramètre comme Func ou un délégué qui prend un double et renvoie un double. Le seul véritable avantage d'un délégué nommé est la possibilité d'ajouter des commentaires xml-doc; les noms descriptifs sont aussi faciles à implémenter que le nom du paramètre au lieu du type. –
KeithS
Je dirais que le prototype de méthode rend encore le code plus lisible que le Func - ce n'est pas seulement le nommage qui rend le code lisible et comme vous le dites, cela ne vous empêche pas de passer lambdas dans le code. –
Si la dénomination du type de délégué est si importante pour la clarté du code, je pense que dans la plupart des cas je pencherais vers une interface et des implémentations. –