System.StackOverflowException

el_teedee Messages postés 497 Date d'inscription mercredi 7 juillet 2004 Statut Membre Dernière intervention 13 juillet 2015 - 26 août 2005 à 11:25
TheSaib Messages postés 2367 Date d'inscription mardi 17 avril 2001 Statut Membre Dernière intervention 26 décembre 2007 - 26 août 2005 à 14:41
Salut,



voilà j'ai une classe avec une variable qui représente un état prenant 5 états possibles.

Voilà la variable en question :

public enum Etat_de_la_navette

{

attente = 0,

envoi_commande = 1,

init_boitier = 2,

transfert_fichier = 3,

creation_csv = 4

}



J'ai un get et un set pour y accéder :

public Etat_de_la_navette Etat_navette

{

get {return (Etat_de_la_navette) Etat_navette;}

set {Etat_navette = (Etat_de_la_navette) value;}

}



Dans ma classe Form1, lorsque je veux initialiser cette variable, je procède comme suit :

instance_de_ma_classe.Etat_navette = ma_classe.Etat_de_la_navette.attente;



Une exception System.StackOverflowException
est levée à la ligne du Set. Comment je peux faire pour changer l'état
de la variable Etat_navette ? Je dois surement me planter dans les cast.



Y'a toujours la possibilité de faire un switch case dans le set{} avec les valeurs 0 à 4, mais je pense qu'il y a mieux ?



Merci.
A voir également:

6 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
26 août 2005 à 11:41
pas besoin de cast dans les get/set.

de manière général, il n'est pas nécessaire de caster une valeur dans le set, puisque le compilateur refusera tout autre type que celui de la propriété.

et la ligne instance_de_ma_classe.Etat_navette = ma_classe.Etat_de_la_navette.attente;

s'écrit : instance_de_ma_classe.Etat_navette = Etat_de_la_navette.attente;

Sébastien FERRAND
0
el_teedee Messages postés 497 Date d'inscription mercredi 7 juillet 2004 Statut Membre Dernière intervention 13 juillet 2015 9
26 août 2005 à 12:04
Bon je récapitule, j'ai donc :

la variable et ses possibilités :

public enum Etat_de_la_navette

{

attente = 0,

envoi_commande = 1,

init_boitier = 2,

transfert_fichier = 3,

reponse_boitier_complete = 4

}



les get et set : (j'ai enlevé les cast)

public Etat_de_la_navette Etat_navette

{

get

{

return Etat_navette;

}

set

{

this.Etat_navette = value;

}

}

Je peux pas écrire

instance_de_ma_classe.Etat_navette = Etat_de_la_navette.attente;

sans préciser ma_classe avant, car sinon, Etat_de_la_navette n'est pas connu. :-(



De plus, lorsque j'arrive à cette ligne :

ma_connexion_in.Etat_navette = Connexion_Serie.Etat_de_la_navette.attente;

il va dans le set (normal), et c'est là que l'exception est (toujours) levée, car apparemment, la ligne

this.Etat_navette = value;

s'appelle elle même, c'est pas normal ?
0
TheSaib Messages postés 2367 Date d'inscription mardi 17 avril 2001 Statut Membre Dernière intervention 26 décembre 2007 23
26 août 2005 à 12:24
public Etat_de_la_navette Etat_navette
{
get {return (Etat_de_la_navette) Etat_navette;}
set {Etat_navette = (Etat_de_la_navette) value;}
}


C'estnormal ton StackOverflow ,ta propriété tourne en boucle.

rajoute :
private Etat_navette _etat_navette = null;

et travaille dans ta classe avec la variable privée.

et change dans tes accesseurs :
public Etat_de_la_navette Etat_navette
{
get {return (Etat_de_la_navette) _etat_navette ;}
set {_etat_navette = (Etat_de_la_navette) value;}
}
0
sebmafate Messages postés 4936 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 14 février 2014 37
26 août 2005 à 12:33
oops... j'l'avias pas vu

Sébastien FERRAND
0

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

Posez votre question
el_teedee Messages postés 497 Date d'inscription mercredi 7 juillet 2004 Statut Membre Dernière intervention 13 juillet 2015 9
26 août 2005 à 14:30
bon, j'ai copié ce que tu m'as indiqu TheSaib, mais il doit encore y avoir une dernière petite chose qui cloche :



j'ai ceci :

public enum Etat_de_la_navette

{

envoi_commande = 1,

travail_boitier = 2,

reception_fichier = 3,

reception_liste = 4,

reponse_boitier_complete = 5,

attente = 0

}



private Etat_navette a = null;



public Etat_de_la_navette Etat_navette

{

get {return (Etat_de_la_navette) a;}

set {a = (Etat_de_la_navette) value;}

}

Erreur sur la ligne en rouge, il ne trouve pas le type ou l'espace de nom "Etat_navette".

Le pire, c'est que j'ai compris le principe, mais je vois pas l'erreur.

et si j'essayais ça sans déclarer "private Etat_navette a = null;"



public Etat_de_la_navette Etat_navette

{

get {return (Etat_de_la_navette) this.Etat_navette;}

set {this.Etat_navette = (Etat_de_la_navette) value;}

}
0
TheSaib Messages postés 2367 Date d'inscription mardi 17 avril 2001 Statut Membre Dernière intervention 26 décembre 2007 23
26 août 2005 à 14:41
Le type ce n'est pas Etat_Navette mais Etat_de_la_navette


private Etat_de_la_navette a = null;
0
Rejoignez-nous