OVH Cloud OVH Cloud

Classes héritées : modification de fonctionnement en 15 (e t 14) depuis windev 12

2 réponses
Avatar
smrhp
Bonjour,

Une question pour un probl=E8me que je rencontre suite =E0 une migration=
de =

windev 12 =E0 windev 15. J'ai rencontr=E9 pas mal de soucis avec les cla=
sses =

h=E9rit=E9es, surtout au travers de composant mais qui arrivent pour une=
bonne =

partie =E0 se solution par l'option "contexte d'ex=E9cution global" plut=
=F4t =

"isol=E9".
Cependant, il me reste un gros probl=E8me que je n'arrive pas =E0 soluti=
onner =

: c'est de pouvoir r=E9cup=E9rer dans l'instance d'une superclasse les i=
nfos =

qui lui sont propres depuis une de ses sous-classes.
Exemple :
Soit une superclasse CAnimal dans un composant CP1 et une sous-classe =

CChien dans un composant CP2 (qui utilise CP1).
Dans un projet P1 qui poss=E8de les 2 composants CP1 et CP2, j'ai une =

instance MonChien de CChien et je souhaite copier dans une classe =

MonAnimal les infos issues de CAnimal depuis MonChien. Cela fonctionnait=
=

tr=E8s bien en windev 12 simplement avec cette syntaxe :

MonChien est un CChien
MonAnimal est un CAnimal

MonAnimal =3D MonChien

(je simplifie un peu car la d=E9claration de l'un est faite dans le proj=
et =

P1 et le transfert se d=E9roule dans le composant CP1)

En windev 15 pas moyen, m=EAme en essayant les nouvelles syntaxes : <=3D=

Je pr=E9cise que je souhaite bien une copie et pas une prise d'adresse (=
<-) =

qui elle fonctionne encore.

J'ai test=E9 un code en PHP qui sera peut-=EAtre plus simple pour faire =
=

comprendre ce que je souhaite :

<?php

class CTest1 {
var $nom;
}

class CTest2 extends CTest1 {
var $pr=E9nom;
}

$MaC1 =3D new CTest1;
$MaC2 =3D new CTest2;

$MaC1->nom =3D "nom";
$MaC2->nom =3D "nomc2";

echo $MaC1->nom . "<br>";
$MaC1 =3D $MaC2;
echo $MaC1->nom;
?>

Ce code parvient bien =E0 me copier l'info issue de la superclasse depui=
s =

l'instance $MaC2 dans l'instance $MaC1.

Bref, je veux faire exactement =E7a, mais en windev. Comment faire ?

Merci.

smrhp

2 réponses

Avatar
STASZEWSKI André
Bonsoir,

En faisant comme ça, ça donne quoi ?
MonAnimal = CChien.MonChien

--
Cordialement,
André STASZEWSKI
(Gratuit) Photo Visu et Cut Data Radars sur
http://pagesperso-orange.fr/mdev/
Pour me contacter, cliquez ici :
http://cerbermail.com/?ao2cTfCupx


"smrhp" a écrit dans le message de news:


Bonjour,

Une question pour un problème que je rencontre suite à une migration de
windev 12 à windev 15. J'ai rencontré pas mal de soucis avec les classes
héritées, surtout au travers de composant mais qui arrivent pour une bonne
partie à se solution par l'option "contexte d'exécution global" plutôt
"isolé".
Cependant, il me reste un gros problème que je n'arrive pas à solutionner
: c'est de pouvoir récupérer dans l'instance d'une superclasse les infos
qui lui sont propres depuis une de ses sous-classes.
Exemple :
Soit une superclasse CAnimal dans un composant CP1 et une sous-classe
CChien dans un composant CP2 (qui utilise CP1).
Dans un projet P1 qui possède les 2 composants CP1 et CP2, j'ai une
instance MonChien de CChien et je souhaite copier dans une classe
MonAnimal les infos issues de CAnimal depuis MonChien. Cela fonctionnait
très bien en windev 12 simplement avec cette syntaxe :

MonChien est un CChien
MonAnimal est un CAnimal

MonAnimal = MonChien

(je simplifie un peu car la déclaration de l'un est faite dans le projet
P1 et le transfert se déroule dans le composant CP1)

En windev 15 pas moyen, même en essayant les nouvelles syntaxes : < Je précise que je souhaite bien une copie et pas une prise d'adresse (<-)
qui elle fonctionne encore.

J'ai testé un code en PHP qui sera peut-être plus simple pour faire
comprendre ce que je souhaite :

<?php

class CTest1 {
var $nom;
}

class CTest2 extends CTest1 {
var $prénom;
}

$MaC1 = new CTest1;
$MaC2 = new CTest2;

$MaC1->nom = "nom";
$MaC2->nom = "nomc2";

echo $MaC1->nom . "<br>";
$MaC1 = $MaC2;
echo $MaC1->nom;
?>

Ce code parvient bien à me copier l'info issue de la superclasse depuis
l'instance $MaC2 dans l'instance $MaC1.

Bref, je veux faire exactement ça, mais en windev. Comment faire ?

Merci.

smrhp
Avatar
smrhp
Bonjour,

Merci de te pencher sur mon problème ;)

Le Sat, 24 Apr 2010 02:16:44 +0300, STASZEWSKI André
a écrit:

Bonsoir,

En faisant comme ça, ça donne quoi ?
MonAnimal = CChien.MonChien



une erreur de compilation. Suite à ta suggestion j'ai aussi tenté :
MonAnimal = CChien.MonAnimal (c'est plutôt dans ce sens que ça m'i ntéresse)
et aussi :
MonAnimal = MonAnimal.CChien (qui ne se met pas en erreur de compilati on
mais qui plante lamentablement quand même :'(

D'autres idées ? Pour l'instant étant coincé je me suis fait une
"Get_CSuperClasse" qui recopie un à un les membres issus de la classe
dérivée dans une instance "Temp" de type SuperClasse pour la renvoye r,
mais c'est franchement pas satisfaisant...

Merci.

--
smrhp