12
votes

Passer une méthode comme paramètre

Je veux pouvoir passer une méthode comme paramètre.

EG .. P>

//really dodgy code
public void PassMeAMethod(string text, Method method)
{
  DoSomething(text);
  // call the method
  //method1();
  Foo();
}

public void methodA()
{
  //Do stuff
}


public void methodB()
{
  //Do stuff
}

public void Test()
{
  PassMeAMethod("calling methodA", methodA)
  PassMeAMethod("calling methodB", methodB)
}


4 commentaires

Vous devriez être capable de le faire avec des délégués.


Quelle version du .NET Framework utilisez-vous?


3.5, quelqu'un peut-il me montrer en utilisant l'exemple ci-dessus? Merci


Est-ce que cela répond à votre question? Méthode de passe comme paramètre utilisant C #


6 Réponses :


7
votes

Utilisez action

Exemple: xxx


0 commentaires

5
votes

ou FUNC

Func<int, string> func1 = (x) => string.Format("string = {0}", x);
PassMeAMethod("text", func1);

public void PassMeAMethod(string text, Func<int, string> func1)
{
  Console.WriteLine( func1.Invoke(5) );
}


0 commentaires

0
votes

bâtiment sur ce que Brunolm a fait, comme cet exemple était bref. XXX


1 commentaires

Pouvez-vous utiliser ceci dans un vide statique?



22
votes

Vous devez utiliser un délégué, qui est une classe spéciale qui représente une méthode. Vous pouvez définir votre propre délégué ou utiliser l'une des celles construites, mais la signature du délégué doit correspondre à la méthode que vous souhaitez réussir.

Définition de votre propre: P>

public void PassMeAMethod(string text, Action method)
{
  DoSomething(text);
  // call the method
  method();    
}

public void methodA()
{
//Do stuff
}


public void methodB()
{
//Do stuff
}

public void Test()
{
//Explicit
PassMeAMethod("calling methodA", new Action(methodA));
//Implicit
PassMeAMethod("calling methodB", methodB);

}


0 commentaires

2
votes

Les délégués sont la langue caractéristique que vous allez avoir besoin d'utiliser pour accomplir ce que vous essayez de faire.

Voici un exemple utilisant le code que vous avez ci-dessus (à l'aide du Action délégué en tant que raccourci): xxx


0 commentaires

0
votes

c # .net2.0 - permettez-moi de montrer une réponse détaillée pour le sujet (Pass-Méthode-as-A-paramètre). Dans mon scénario, je configure un ensemble de system.timers.timer -s, chacun avec une méthode différente _tick . XXX


0 commentaires