C# en Passant comme Argument de la Fonction
J'ai écrit une fonction en C# qui n'numérique de la différenciation. Il ressemble à ceci:
public double Diff(double x)
{
double h = 0.0000001;
return (Function(x + h) - Function(x)) / h;
}
Je voudrais être en mesure de passer dans n'importe quelle fonction, comme dans:
public double Diff(double x, function f)
{
double h = 0.0000001;
return (f(x + h) - f(x)) / h;
}
Je pense que c'est possible avec les délégués (peut-être?) mais je ne suis pas sûr de la façon de les utiliser.
Toute aide serait grandement appréciée.
Vous devez vous connecter pour publier un commentaire.
À l'aide de la touche Func comme mentionné ci-dessus fonctionne, mais il y a aussi des délégués qui font la même tâche et aussi de définir l'intention à l'intérieur de la désignation:
Il ya un couple de types génériques dans .Net (v2 et plus tard) ce qui rend le passage de fonctions autour de délégués très facile.
Pour les fonctions avec des types de retour, il est Func<>, et pour les fonctions sans retour types, il y a de l'Action<>.
À la fois la touche Func et l'Action peuvent être déclarées pour prendre de 0 à 4 paramètres. Par exemple, la touche Func < double, int > prend une double comme un paramètre et retourne un int. Action < double, double, double > prend trois doubles en paramètre et retourne rien (void).
De sorte que vous pouvez déclarer vos Diff fonction de prendre un Func:
Et puis vous l'appeler ainsi, simplement en lui donnant le nom de la fonction qui correspond à la signature de votre Func ou de l'Action:
Vous pouvez même écrire la fonction en ligne avec lambda syntaxe:
Func
etAction
ont été mis à jour pour 16 paramètres.Func<double, double>
c'est la première dérivée de la fonction d'entrée, calculés numériquement bien sûr.return x => (f(x + h) - f(x)) / h;
Vous pouvez même écrire une surcharge qui a retourné len
dérivée de la fonction d'entrée.Utilisation: