tri_yann
Messages postés124Date d'inscriptionmercredi 23 novembre 2005StatutMembreDernière intervention19 septembre 2013
-
19 sept. 2013 à 22:40
NHenry
Messages postés15090Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention 6 novembre 2023
-
20 sept. 2013 à 12:46
Bonjour,
D'avance merci à ceux qui ou tenteront de m'aider.
J'ai construit une classe parent que j'appellerai "ClsPersonne".
Dans la classe ClsPersonne, j'ai une Shared Function qui renvoit une classe ClsPersonne.
Public Class ClsPersonne
Private pRein as string
Private pCoeur as Object
...
Public Shared Function GetPersonne (Anatomie as Object) as ClsPersonne
Dim Res as New ClsPersonne
' code
Return Res
End Function
End Class
J'ai une classe dérivée "ClsHomme" qui hérite de la classe ClsPersonne contenant quelques propriétés supplémentaires.
Public Class ClsHomme
Inherits ClsPersonne
Private pSexe as Boolean
End Class
Dans une Function (extérieure aux classes) je voudrai récupérer un objet type ClsHomme en utilisant la méthode GetClsPersonne
Dim Raoul as ClsHomme = ClsPersonne.GetPersonne(Anatomie)
A l'exécution j'ai une exception "Impossible d'effectuer un cast de "ClsPersonne" en "ClsHomme".
Quelqu'un peut-il m'expliquer pourquoi le polymorphisme ne fonctionne pas dans mon cas ?
Et le cas échéant, la solution à mon problème ?
Salutations
A voir également:
Exception de Cast d'une classe parent en une classe dérivée
J'ai bien senti dans mon cas qu'une classe parent ne peut pas être castée en class dérivée.
Mais malgré tout, j'ai besoin de savoir s'il y a moyen, par exemple en créant une fonction "Cast' de faire ce qui n'est pas possible.
Mon soucis est de ne pas dupliquer la fonction de la classe mère dans toutes les classes dérivées.
Par exemple :
Dim ObjHomme = ClsPersonne.Cast(ObjPersonne, pSexe:=True)
J'ai la même exception avec le DirectCast. Je pense que cette méthode était utilisée implicitement.
J'ai opté pour l'abandon de l'héritage. j'ai modifié ma classe ClsHomme. Elle contient maintenant un objet ClsPersonne.
Je peux utiliser tout de même les méthodes de cet objet stocké dans ClsHomme via une propriété.
Merci beaucoup de ton aide.
Je reste sur ma faim tout de même. Pour moi un héritage de classes permettait de créer une classe dérivée "spécialisée" de la classe parent. Et dans mon cas je suis bloqué. Tant pis.
Cordialement
Yann
Vous n’avez pas trouvé la réponse que vous recherchez ?
NHenry
Messages postés15090Date d'inscriptionvendredi 14 mars 2003StatutModérateurDernière intervention 6 novembre 2023159 20 sept. 2013 à 12:46
Mon message était clair pourtant :
Function RetourneBonEnregistrement(ClasseDeBase As ClsPersonne, IsMale as Boolean) As ClsPersonne
If IsMale Then
Return New ClsHomme(...)
Else
Return New ClsFemme(...)
End If
End Function
Et plus loin :
Dim MonHomme As ClsHomme=DirectCast(RetourneBonEnregistrement(MaPersonne,True), ClsHomme)
Si ta fonction ne fait que (directement ou non) :
Return New ClsPersonne
C'est normal que ton cast échoue.