Return et/ou structuration de classe

Résolu
cs_titi66 Messages postés 120 Date d'inscription mercredi 14 janvier 2004 Statut Membre Dernière intervention 3 mars 2009 - 14 juin 2005 à 15:35
cs_titi66 Messages postés 120 Date d'inscription mercredi 14 janvier 2004 Statut Membre Dernière intervention 3 mars 2009 - 15 juin 2005 à 08:57
Bonjour

J'ai crée un classe Usines et 3 classes en dérivant.

Voici le constructeur :

public Usines(
string str_doc,Type TypeACreer)


{


strDocumentXml = str_doc;


alBobines =
new ArrayList();



//Instantiate an XmlDocument object.


if ( (TypeACreer.IsSubclassOf(
typeof(Usines))) )


{


Type[] types =
new Type[1];


types[0] =
typeof(
string);


return (Usines)constructorInfoObj.Invoke(types);



}


else


{


MessageBox.Show("Type non supporté");


};


}



j'ai un 2°eme Constructeur :
public Usines(
string str_doc)


{}

Je veux dans mon Main appelé mon instancié Usines en lui passant en 2° parametre le nom de la classe dérivée qui doit être utlisée comme suit :


Usines v_Usine = new Usines(strDocument,typeof(Usine_derivee));

PB : le return (Usines)constructorInfoObj.Invoke(types); de mon constructeur ne passe pas à la compil ...

1/ l'idée de passer ce parametre vous semble t elle bonne ? sinon comment faire ?
2/ help pour le return ?

Merci

7 réponses

sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
14 juin 2005 à 19:42
mouarf... bonne remarque Lutinore...
titi66 transforme ton code comme ceci :


Usines v_Usine = null;

if (rb_Usine1.Checked)
{ v_Usine = new Usine1(strDocument) ;}
else if (rb_Usine2.Checked)
{ v_Usine = new Usine2(strDocument) ;}


else if (rb_Usine3.Checked)
{v_Usine = new Usine3(strDocument) ;}

if (v_Usine != null) {
v_Usine.Detail_Xml();
}


<HR>
Sébastien FERRAND

Blog : http://blogs.developpeur.org/sebmafate
3
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
14 juin 2005 à 16:12
je ne vois pas l'intérêt d'un tel code...

pourquoi ne pas dérivée ta classe Usine et utiliser le constructeur de la classe fille ?


<HR>
Sébastien FERRAND

Blog : http://blogs.developpeur.org/sebmafate
0
cs_titi66 Messages postés 120 Date d'inscription mercredi 14 janvier 2004 Statut Membre Dernière intervention 3 mars 2009
14 juin 2005 à 16:23
C'est ce que j'avais fais avant .
J'avais en fait 3 radiobutton
je choisissais l'usine cochant

if (rb_Usine1.Checked)
{ Usine1 v_Usine = new Usine1(strDocument) ;}


else if (rb_Usine2.Checked)
{ Usine2 v_Usine = new Usine2(strDocument) ;}


else if (rb_Usine3.Checked)
{Usine3 v_Usine = new Usine3(strDocument) ;}

Cela ne passe pas a la compil , type ou nom d'espace de nom v_Usines introuvable
je ne veux utiliser qu'une seule varible v_Usine pour les 3 cas, car dans la suite du code j'appelle plusieurs méthodes...
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
14 juin 2005 à 16:36
ok... voici comment je ferais :

Je construirais une classe abstract Usine qui contiendrait toutes les membres communs à toutes les autres classes.
Après tu crées tes classes Usine1 à 3 en dérivant cette classe.

ce qui te permettra d'écrire :
Usine usine = new Usine3(strDocument);


<HR>
Sébastien FERRAND

Blog : http://blogs.developpeur.org/sebmafate
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_titi66 Messages postés 120 Date d'inscription mercredi 14 janvier 2004 Statut Membre Dernière intervention 3 mars 2009
14 juin 2005 à 17:08
Merci,
cela fonctionne sauf quand je place les instanciations dans les tests :

la compil renvoi 'type ou nom d'espace de nom v_Usines introuvable'
j'ai déclaré la variable avant , mais


Usines v_Usine;

if (rb_Usine1.Checked)
{ Usine1 v_Usine = new Usine1(strDocument) ;}
else if (rb_Usine2.Checked)
{ Usine2 v_Usine = new Usine2(strDocument) ;}


else if (rb_Usine3.Checked)
{Usine3 v_Usine = new Usine3(strDocument) ;}

V_Usine.Detail_Xml();

La compil me renvoi : 'Utilisation d'une variable non assignée v_Usine' sur la dernière ligne
0
Lutinore Messages postés 3246 Date d'inscription lundi 25 avril 2005 Statut Membre Dernière intervention 27 octobre 2012 41
14 juin 2005 à 18:06
Eh ! sur la derniere ligne V_Usine a une majuscule !?

Il y'a plusieurs variables avec le meme nom dans la meme portee !

Si tu declares une variable dans un bloc elle n'existe plus à la sortie du bloc !
0
cs_titi66 Messages postés 120 Date d'inscription mercredi 14 janvier 2004 Statut Membre Dernière intervention 3 mars 2009
15 juin 2005 à 08:57
Merci beaucoup

Je débute en csharp et j'ai encore beaucoup de choses à apprendre ....
0
Rejoignez-nous