Salut,
ta fonction et ton delegate (RouleAuto et RouleHander) n'ont pas le meme modificateur de portée.
C'est une erreur de ma part, désolé.
la fonction doit matcher exactement la signature du delegate
Ok ça répond à l'essentiel de ma question
tu ne peux pas mettre en paramètre de RouleAuto un MoteurAutomatique, car le delegate pourrait très bien recevoir en paramètre un Moteur qui ne soit pas un MoteurAutomatique...
là je te suis pas. Si j'ai une signature du type RouleAuto(MoteurAutomatique unMoteurAuto) je ne peux pas passer un Moteur en paramètre (un moteur n'est pas un moteurAuto).
Si j 'execute Roule(unMoteurAuto), là non plus pas de problème car unMoteurAuto est de type MoteurAuto, donc un moteur.
je ne vois pas l'intérêt ici d'utiliser un delegate plutôt qu'une méthode virtuelle...
Bing !
effectivement je ne suis pas obligé d'utiliser un delagate. Je pourrais utiliser une méthode virtuelle, mais j ai les même contraintes d'exactitude de signature. Code je reprends du code, avant de changer tout il me faut un gain substanciel.
ce que tu as fait là n'est pas du polymorphisme !
Comme tu y vas ! Vouloir traiter toutes les voitures de la même manière qu'elles soient automatiques ou manuelle ça me semble être pas mal ça.
Mon objectif est de pour voir rajouter n types de couple véhicule + moteur si necessaires.
Ouais dis comme ça c est pas terrible.
Le projet réel concerne pas des voitures mais une résolution de match de foot US avec 40 ou + acteurs (blocker, quarterback, running backs, ...) , ayant chacun 2 ou 3 machines à états (de corps, de moral, de logique).
Le but du jeu est de passer à travers tous les acteurs avec une boucle simpe du genre
1 2 3 4 5 6 7
| foreach (Actor actor in actors)
{
foreach (Behavior behavior in actor.BehaviorList)
{
behavior.stateMachine.Update(behavior.DataContext);
}
} |
où behavior est le couple d'une StateMachine et de ses données de travail (DataContext).
Les données sont propres aux acteurs mais plusieurs acteurs peuvent partager la meme StateMachine...
Au final, et pour implémenter mon approche "moteurs" visiteurs de véhicules et à cause de la contrainte d'exactitude dans la signature, je suis obligé d'utiliser un cast :
1 2 3 4 5 6
| public void RouleAuto(Moteur moteur)
{
MoteurAutomatique unMoteurAuto = (MoteurAutomatique)moteur;
//Fait quelque chose de spécifique au type moteurAuto en accédant par exemple à un attribu specifique
Console.WriteLine("avec une boite auto de type" + unMoteurAuto.TypeDeBoiteAuto.ToString());
} |
C est môche moi je trouve.
Partager