IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

Problèmes sur Get Set d'une variable.


Sujet :

Windows Forms

  1. #1
    Membre habitué

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    13
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Janvier 2006
    Messages : 13
    Points : 168
    Points
    168
    Par défaut Problèmes sur Get Set d'une variable.
    Bonjour,

    Bien qu'ayant certaines bases en C#, certains concepts m'échappent encore un peu. J'ai notamment essayé de faire une classe C# contenant des propriétés.

    Mon problème est le suivant : à chaque fois que j'initialise ma classe (voir code ci-dessous) avec le constructeur prenant en paramétre un string, ma propriété Name provoque une exception de type StackOverflow, et en effet en regardant la pile d'exécution, je constate qu'il y'a un appel récursif sur le "set" de ma propriété. J'ai le même problème sur le "get". Comment puis-je résoudre ce petit problème ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    class VideoFile
        {
            public string Name { get { return this.Name; } set { this.Name = value; } }
            public string Title { get { return this.Title; } set { this.Title = value; } }
            public string Author { get { return this.Author; } set { this.Author = value; } }
     
     
            public VideoFile()
            { }
     
            public VideoFile(string file)
            {
                this.Name = file;
                this.extractInfos();
            }
     
            public void extractInfos()
            {
                this.Author = "";
                this.Title = new FileInfo(this.Name).Name;
            }
        }
    Je vous remercie d'avance pour votre réponse,
    Mattk

  2. #2
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    C'est normal

    Regarde ton code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    public string Name { get { return this.Name; } set { this.Name = value; } }
    La propriété Name appelle, via le get, le this.Name donc à chaque fois, tu te réappelles....

    Il faut utiliser un champ privé pour déclarer des propriétés:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    private string _Name;
    public string Name { get { return this._Name; } set { this._Name = value; } }
    Pareil pour les autres

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2003
    Messages : 105
    Points : 134
    Points
    134
    Par défaut
    Hello,

    si tu regardes ton code, le bloc get de ton accesseur renvoie la variable accesseur elle-même, qui redéclenche le bloc get (et ainsi de suite). Le bloc set affecte la variable accesseur elle-même également, et tu obtiens donc à nouveau ce comportement erroné qui crée inévitablement une récursion infinie et donc un stack overflow.

    On crée généralement pour chaque accesseur une variable privée de même type que tu utilises pour stocker l'information. L'accesseur l'utilise ensuite pour la mettre à jour ou la lire. Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    class VideoFile
    {
        private string _Name;
        public string Name
        { 
            get { return _Name; }
            set { _Name = value; }
        }
    // ...
    }
    Bonne fêtes !

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    Sinon si t'a pas envie de te faire chier avec tes Get Set
    Tu cré ta variable :

    private string _var;

    puis tu utilise les touche de raccourci ctrl+r+e
    cela encapsule ton champs dans des Get Set et évite les erreur

  5. #5
    Rédacteur
    Avatar de Thomas Lebrun
    Profil pro
    Inscrit en
    Octobre 2002
    Messages
    9 161
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2002
    Messages : 9 161
    Points : 19 434
    Points
    19 434
    Par défaut
    Citation Envoyé par Lefauve
    Sinon si t'a pas envie de te faire chier avec tes Get Set
    Tu cré ta variable :

    private string _var;

    puis tu utilise les touche de raccourci ctrl+r+e
    cela encapsule ton champs dans des Get Set et évite les erreur
    Ou tu tapes prop et tu appuyes sur Tab, dans Visual Studio, pour qu'il te génère tout ce qu'il te faut

  6. #6
    Membre habitué Avatar de Mourad
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 152
    Points : 161
    Points
    161
    Par défaut
    ou tout simplement tu commences sérieusement à revoire tes bases en C#

Discussions similaires

  1. Réponses: 7
    Dernier message: 13/03/2006, 15h39
  2. [debutant] get image avec une variable non static
    Par laguna dans le forum Langage
    Réponses: 2
    Dernier message: 06/03/2006, 15h57
  3. petite question sur la récupération d'une variable
    Par minusette dans le forum Langage
    Réponses: 6
    Dernier message: 17/11/2005, 16h57
  4. Problème sur la réalisation d'une requête
    Par soso78 dans le forum Access
    Réponses: 1
    Dernier message: 06/10/2005, 13h17
  5. Réponses: 3
    Dernier message: 01/12/2004, 09h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo