Je vais essayer d'être plus complet et plus clair sur ce que je veux faire :
J'ai des fonctions qui agissent sur une liste d'input :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| //classe travaillant sur des inputs
public abstract class ATraiteur
{
//liste des objets sur lesquels la classe travaille
//la string est l'alias utilisé dans les fonctions de traitement et l'objet et l'objet surlekel on travail
protected Dictionary<string, Object> _inputs = new Dictionary<string, object>();
//une fonction de traitement
public abstract void action();
//ajout d'un objet sur lequel la classe pourra travailler
public void addInput(string alias, object newInput)
{
_inputs.Add(alias, newInput);
}
} |
Ces fonctions ne connaissent leurs inputs que via un alias, une implémentation de cette classe :
1 2 3 4 5 6 7 8 9 10 11
|
//une implémentation de ATraiteur
public class traiteur1 : ATraiteur
{
public override void action()
{
//il faut que _inputs contienne les entrées objectInt32 et objectMonInt32
_inputs["objectInt32"] = 0;
((MonInt32)(_inputs["objectMonInt32"])).Value = 0;
}
} |
et voici ce que je veux faire :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| static void Main(string[] args)
{
//creation des objets sur lesquels les fonctions traiteurs vont travailler
int intNormal = 5;
MonInt32 objMonInt32 = new MonInt32(5);
//creation d'une fonction traiteur et liaison avec les objets précédemment créés
traiteur1 t1 = new traiteur1();
t1.addInput("objectInt32", intNormal);
t1.addInput("objectMonInt32",objMonInt32);
//traitement
t1.action();
//fin du traitement
Console.WriteLine("intNormal : " + intNormal + ", objMonInt32 : " + objMonInt32.Value);
}
} |
Console.WriteLine("intNormal : " + intNormal + ", objMonInt32 : " + objMonInt32.Value); affiche 5 et 0, je voudrais 0 et 0.
En faite, mes objets ATraiteur doivent travailler sur les mêmes inputs, ainsi si traiteur1 modifie l'objet objMonInt32 du programme principal alors traiteur2 (si il esixtait) devrait travailler sur la nouvelle valeur de objMonInt32.
Quand on a des objets avec des champs, il n'y a pas de probleme mais dans traiteur 1 quand je fait :
_inputs["objectInt32"] = 0;
c'est comme si je faisais :
_inputs["objectInt32"] = new Int32(0);
En passant par un objet monInt32 il n'y a pas de problème puis que je change la valeur d'un champ, je ne crée pas un nouvel objet.
Je voudrais pouvoir faire cela sans la classe monInt32, je pensais qu'il y avait une méthode pour changer la valeur d'un int genre :
1 2 3
| int i;
i.Value = 3;
ou i.set(3); |
J'espère que je me suis mieux exprimé...
Partager