810 votes

Passez la méthode en tant que paramètre à l’aide de c#

J’ai plusieurs méthodes toutes avec la même signature (paramètres et valeurs de retour) mais des noms différents et le fonctionnement interne des méthodes est différent. Je veux passer le nom de la méthode à exécuter à une autre méthode qui appellera la méthode passée.

Ce code ne fonctionne pas, mais c’est ce que j’essaie de le faire. Ce que je ne comprends pas comment écrire le code de RunTheMethod, étant donné que j’ai besoin de définir le paramètre.

966voto

Egil Hansen Points 3999

Vous pouvez utiliser le délégué Func dans .net 3.5 comme paramètre dans votre méthode de RunTheMethod. Le délégué Func vous permet de spécifier une méthode qui prend un certain nombre de paramètres d’un type spécifique et retourne un seul argument d’un type spécifique. Voici un exemple qui devrait fonctionner :

395voto

Jon Skeet Points 692016

Vous devez utiliser un délégué. Dans ce cas, toutes vos méthodes prennent un string paramètre et retourne un int - ce qui est plus simplement représentée par l' Func<string, int> déléguéà 1. Ainsi, votre code peut devenir correcte avec d'aussi simple qu'un changement comme ceci:

public bool RunTheMethod(Func<string, int> myMethodName)
{
    // ... do stuff
    int i = myMethodName("My String");
    // ... do more stuff
    return true;
}

Les délégués ont beaucoup plus de pouvoir que cela, certes. Par exemple, avec le C#, vous pouvez créer un délégué d'une expression lambda, de sorte que vous pourriez appeler votre méthode de cette façon:

RunTheMethod(x => x.Length);

Qui va créer une fonction anonyme comme ceci:

private static int <>_HiddenMethod_<>(string x)
{
    return x.Length;
}

et puis passer que délégué à l' RunTheMethod méthode.

Vous pouvez utiliser les délégués pour les abonnements d'événements, d'exécution asynchrone, rappels - toutes sortes de choses. Il vaut la peine de le lire, surtout si vous souhaitez utiliser LINQ. J'ai un article qui est surtout sur les différences entre les délégués et les événements, mais vous trouverez peut-être utile de toute façon.


1 C'est juste basé sur le générique de l' Func<T, TResult> type de délégué dans le cadre, vous pouvez facilement déclarer votre propre:

public delegate int MyDelegateType(string value)

et puis faire le paramètre de type MyDelegateType à la place.

124voto

Zain Ali Points 3813

Vous pouvez également essayer le délégué Action !

Puis appelez votre méthode à l’aide

Ou

Ensuite il suffit d’appeler méthode

36voto

kravits88 Points 1307
<pre><code></code><p>Utilisation :</p><pre><code></code></pre></pre>

16voto

Bruno Reis Points 16132

Vous devez utiliser un délégué, ce qui représente une prise de fonction une comme argument et retournant un `` :

Puis l’utiliser :

Prograide.com

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.

Powered by:

X