System.StackOverflowException

Messages postés
498
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
13 juillet 2015
- - Dernière réponse : TheSaib
Messages postés
2369
Date d'inscription
mardi 17 avril 2001
Statut
Modérateur
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.
Afficher la suite 

6 réponses

Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
32
0
Merci
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
Commenter la réponse de sebmafate
Messages postés
498
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
13 juillet 2015
6
0
Merci
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 ?
Commenter la réponse de el_teedee
Messages postés
2369
Date d'inscription
mardi 17 avril 2001
Statut
Modérateur
Dernière intervention
26 décembre 2007
14
0
Merci
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;}
}
Commenter la réponse de TheSaib
Messages postés
4936
Date d'inscription
lundi 17 février 2003
Statut
Modérateur
Dernière intervention
14 février 2014
32
0
Merci
oops... j'l'avias pas vu

Sébastien FERRAND
Commenter la réponse de sebmafate
Messages postés
498
Date d'inscription
mercredi 7 juillet 2004
Statut
Membre
Dernière intervention
13 juillet 2015
6
0
Merci
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;}

}
Commenter la réponse de el_teedee
Messages postés
2369
Date d'inscription
mardi 17 avril 2001
Statut
Modérateur
Dernière intervention
26 décembre 2007
14
0
Merci
Le type ce n'est pas Etat_Navette mais Etat_de_la_navette


private Etat_de_la_navette a = null;
Commenter la réponse de TheSaib