ypelissier
Messages postés23Date d'inscriptionvendredi 16 mars 2012StatutMembreDernière intervention16 mai 2013
-
9 mai 2013 à 22:58
Whismeril
Messages postés19028Date d'inscriptionmardi 11 mars 2003StatutNon membreDernière intervention24 avril 2024
-
15 mai 2013 à 12:08
Bonsoir,
J'ai quelques rudiments pour faire de l'objet avec toute la panoplie de l'interface et de l'héritage, mais je suis confronté à une situation sur laquelle je bloque et un coup de pouce me serait bien utile.
Voilà le décore, j'ai deux objets Titi et Toto qui héritent de Tata. Ce-dernier implémente l'interface ITata.
Dans mon formulaire, j'ai une variable globale centrale de mon programme, mais au début de l'exécution, je ne sais pas si cela va être titi ou toto. Le choix se fait à l'aide d'un switch et j'ai le code suivant :
// Déclaration
ITata maos
private void Choisir()
{
switch (lenm_AOS)
{
case enum_ChoixObjet.Titi:
maos = new Titi();
maos.SpecifiqueTiti = LireDansFichierIni();
break;
case enum_ChoixObjet.Toto:
maos = new Toto();
maos.SpecifiqueToto();
break;
default:
Application.Exit();
return;
}
}
Vous l'avez compris, j'ai une erreur sur SpecifiqueTiti et SpecifiqueToto puisqu'ils ne sont pas dans l'interface ITata.
Of course, mais si je mets Titi maos, j'ai des soucis avec Toto et vice et versa.
yann_lo_san
Messages postés1137Date d'inscriptionlundi 17 novembre 2003StatutMembreDernière intervention23 janvier 201626 10 mai 2013 à 21:22
Salut,
A mon avis, ne déclares pas directement l'interface, mais l'objet qui l'implémente, en l'occurence Tata.
///ITata maos
Tata maos;
maos = new Titi(); // Ok puisque Titi dérive de Tata
maos.SpecifiqueTiti = LireDansFichierIni(); // pas besoin de cast
// Accès à l'interface, cast explicite
((Itata)maos).MethodeInterface();
ypelissier
Messages postés23Date d'inscriptionvendredi 16 mars 2012StatutMembreDernière intervention16 mai 2013 15 mai 2013 à 10:21
Bonjour,
Désolé pour cette réponse tardive, mais j'ai aussi profité de mon week-end
J'ai suivi vos conseil et retiré l'interface pour y mettre l'objet "père".
Et j'ai forcé avec le cast à chaque fois que je souhaite faire une spécificité.
Mon code devient le suivant :
// Déclaration
Tata maos // Directement l'objet mère et pas son interface
private void Choisir()
{
switch (lenm_AOS)
{
case enum_ChoixObjet.Titi:
maos = new Titi();
((Titi)maos).SpecifiqueTiti = LireDansFichierIni(); // @yann_lo_san : Il faut quand même forcer avec le cast sinon ça ne compile pas
break;
case enum_ChoixObjet.Toto:
maos = new Toto();
((Toto)maos).SpecifiqueToto(); // Attention à bien mettre les doubles parenthèses pour forcer avec le cast
break;
default:
Application.Exit();
return;
}
}
Tout fonctionne impeccablement maintenant, je vais pouvoir terminer mon projet.