Guillemouze
Messages postés991Date d'inscriptionsamedi 25 octobre 2003StatutMembreDernière intervention29 août 2013
-
11 sept. 2007 à 09:50
Guillemouze
Messages postés991Date d'inscriptionsamedi 25 octobre 2003StatutMembreDernière intervention29 août 2013
-
16 sept. 2007 à 23:25
salut tout le monde, j'ai un petit souci et je ne vois pas trop comment le contourner.
voici la structure de mes classes :
ma question est la suivante :
j'ai une variable de type TObjetGeometrique qui contient soit un TOGPointSpecial, soit un TOGSegmentSpecial. Je voudrais le caster en IOGSpecial, mais apparament c'est pas possible (il faut absolument que le type de ma variable implemente l'interface) !!!
cs_Loda
Messages postés814Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention30 juillet 20093 12 sept. 2007 à 09:08
salut,
ce comportement est normal.
pourquoi n'utilises-tu pas directement une var de type IOGSpecial?
sinon, je sais pas si ça "passe", mais si tu le cast d'abord en (le bon) TOGSpecial, puis en IOGSpecial ? Genre avec une function avec des "is" et "as".
mais je te conseille plustot de revoir ton design ou d'utiliser une var de type interface.
bon code,
Loda
<hr size="2" width="100%" />Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.
Guillemouze
Messages postés991Date d'inscriptionsamedi 25 octobre 2003StatutMembreDernière intervention29 août 20136 12 sept. 2007 à 09:27
je peux pas utiliser directement une var de type IOGSspecial car celle ci m'est renvoyée par une fonction de base sur les TObjetGeometrique.
"tu le cast d'abord en (le bon) TOGSpecial, puis en IOGSpecial ?" c'est ce que j'ai fait finalement, j'ai une fonction TObjetGeometrique2IOGSpecial qui verifie le type avant de caster. Le probleme, c'est que si je rajoute un heritier de IOGSpecial, il faudra que je pense a le rajouter dans cette fonction.
par contre, la commande
z := TOGPointSpecial(MonOG) as IOGZone;
ne marche pas, il faut que je fasse
z := IOGZone(TOGPointSpecial(MonOG));
Je cherche donc toujours une solution plus generique.
Guillemouze
Messages postés991Date d'inscriptionsamedi 25 octobre 2003StatutMembreDernière intervention29 août 20136 12 sept. 2007 à 13:56
bah c'est a dire que m'a structure de base est assez avancée, et la partie que j'ai decrite n'en est qu'une infime paartie.
En fait je me base sur un structure de geometrie de base, que j'utilise dans plusieurs projets donc je ne peux pas la modifier impunement.
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_Loda
Messages postés814Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention30 juillet 20093 13 sept. 2007 à 09:05
re,
ouai dans ce cas...
sinon, en function de ce qu'est "special" tu peux aussi cherché du côté d'une association avec un object suplémentaire qui manage le "spécial". (solution adapté, si par exemple, spécial contient des couleurs ou des attributs de dessin).
mais j'ai pas d'autre idée.
bon code,
Loda
<hr size="2" width="100%" />Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.
Guillemouze
Messages postés991Date d'inscriptionsamedi 25 octobre 2003StatutMembreDernière intervention29 août 20136 13 sept. 2007 à 09:13
en
function de ce qu'est "special" : hou la deformation professionelle !
un objet supplementaire ne changera rien, il faudra que je cast en le type final pour y avoir acces. Ce que je voulais, c'est pouvoir caster ma classe de base en un type, afin d'avoir acces a des proprietes pour certains objets herites, quel que soit le chemin d'heritage qu'ils prennent (point, segment, ...)
cs_Loda
Messages postés814Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention30 juillet 20093 13 sept. 2007 à 10:54
"en function de ce qu'est "special" : hou la deformation professionelle !"
m'en parle pas! en plus je code/documente en anglais tout la jounrée (et le soir de temps en temps). imagine.
tu peux aussi créer le lien avec l'objet dans ta class de base.
note que je te fais des grandes supposition dans le vide vu que j'ai pas la moindre idée (précise) de ta structure/besoins.
allez. bon code !
Loda
<hr size="2" width="100%" />Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.
cs_Delphiprog
Messages postés4297Date d'inscriptionsamedi 19 janvier 2002StatutMembreDernière intervention 9 janvier 201332 16 sept. 2007 à 19:27
"il faut absolument que le type de ma variable implemente l'interface"
Si tu veux vraiment utiliser les interfaces, c'est le minimum auquel tu devras te plier...
A mon tour de poser quelques questions :
1 : pourquoi la classe TObjetGeometrique n'implémente-t-elle pas également cette interface ?
2 : en quoi l'utilisation de l'interface IOGSpecial est-elle vraiement indispensable ?
3 : si cette interface est vraiment indispensable, pourquoi les membres de la hiérarchie ne l'implémentent-ils pas aussi ?
NB : si tu veux accéder à des propriétés, tu peux très bien les décrire dans l'interface IOGSpecial mais il faudra aussi les implémenter les accesseurs des classes qui l'utilisent.
May Delphi be with you !
<hr color="#008000" />
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
http://www.afipa.net/
Guillemouze
Messages postés991Date d'inscriptionsamedi 25 octobre 2003StatutMembreDernière intervention29 août 20136 16 sept. 2007 à 23:25
1 : pourquoi la classe TObjetGeometrique n'implémente-t-elle pas également cette interface ?
parce que cette interface n'a rien a voir avec les objets de base, les objets speciaux sont plus evolués et ont quand meme une grosse difference avec ceux de base
2 : en quoi l'utilisation de l'interface IOGSpecial est-elle vraiement indispensable ?
afin de manipuler des proprietes/methodes communes a mes objets speciaux, qui peuvent heriter d'objetgeometrique par divers voies
3 : si cette interface est vraiment indispensable, pourquoi les membres de la hiérarchie ne l'implémentent-ils pas aussi ?
cf question 1