Bonjour,

J'ai un liste d'objets (de type A) et je veux pour chaque elements lui faire executer la fonction f1, f2 ou f3 (la même pour touts les elements de la liste).

Une manière de faire ça pourrait etre :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
public void doF1OnAll()
    {
        //parcourt de la liste et pour chaque element elemnt.f1();
    }
+ les fonctions doF2OnAll() et doF3OnAll()

Mais c'est quand meme pas super, on fait presque toujours la meme chose et pourtant on est obliger de dupliquer le code.

J' ai pensé aux delegates mais je ne suis pas encore arrivé à faire exactement ce que je veux :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
public class A {
    public void f1(){}
    public void f2(){}
    public void f3(){}
}
 
public class B {
    Queue maQueueA;//queue contenant des objets de type A
    public delegate void myDelegate(A objA );
 
    public void toto()
    {
         forAll(callF1OnA);
    }
 
     private void callF1OnA(AobjA)
    {
         objA.f1();
     }
 
    private void forAll(myDelegate aFunc)
    {
         Queue copy = new Queue(maQueueA);
         while (copy.Count > 0) //execution de aFunc sur chaque element de la liste
          aFunc( ((A) copy.Dequeue()));
 
    }
}
Maintenant le parcours de la liste est codé une unique fois mais je dois passer par une fonction intermédiaire (callF1OnA).

Bon en résumé, voila ce que je voudrais pouvoir faire :

avoir une fonction
qui prenne en paramtre soit la fonction f1, soit f2, soit f3 et l'exécute sur chaque element A de la liste. Ainsi de la meme maniere, si je voudrai iniialiser tous les elements de la liste je n'aurais qu'à faire forALL(init()), où init est une fonction non static de la classe A.

Est ce que des gens ont des idées ?

PS : je n'ai surement pas été très clair alors n'hésitez pas à poser des questions