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

C# Discussion :

Utiliser un contructeur dans un "set"


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2006
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 48
    Par défaut Utiliser un contructeur dans un "set"
    Bonjour,

    mon employeur, pour lequel je programme en C# m'a (bizarrement) donné une contrainte pour la programmation de mes classes :

    Toutes les variables doivent être private readonly.


    Ainsi, si je crée une classe qui contient un double, je dois créer une propriété pour obtenir la valeur de y.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    class A 
    {
    private readonly double y;
    
    public A(double x) {y=x;}
    
    public double yreader
    {
    get {return y;}
    
    set {???????????????}
    }
    
    }

    Mon problème est pour modifier la valeur de y. Je souhaiterais tout simplement appeler mon constructeur, puisque lui peut modifier la valeur de y.

    Je comptais donc mettre à la place des ??? :

    this = new A(value);

    ou même this(value);

    Les deux ne marchent pas.

    Donc : est il possible de "reconstruire" ma variable dans une propriété (et donc pas dans un constructeur) ?

    Dans le cas contraire, comment puis je remplir les points d'interrogation afin que la valeur de y soit modifiée ?


    En vous remerciant d'avance...

    PS : je sais que c'est un peu bizarre de mettre TOUTES les variables des classes en readonly, mais bon, je ne vais pas mordre la main qui me nourrit.

  2. #2
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Une variable en readonly ne peut être initialisée que dans un constructeur et une fois initialisée tu ne peux plus changer la valeur. Donc tu ne peux pas avoir de propriété en écriture sur cette variable et encore moins une méthode qui modifierait la valeur.

    Toutes les variables en readonly, à moins qu'elles puissent toutes êtres initialisées dans un constructeur et qu'aucune modification ultérieure n'est requise, c'est n'importe quoi.

    Mais bon, ne connaissant pas le contexte, je m'avance peut être un peu. Ce serait bien de savoir pourquoi cette contrainte est nécessaire.

  3. #3
    Membre Expert Avatar de Guulh
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    2 160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 2 160
    Par défaut
    Citation Envoyé par Magemax Voir le message
    PS : je sais que c'est un peu bizarre de mettre TOUTES les variables des classes en readonly, mais bon, je ne vais pas mordre la main qui me nourrit.
    Certes, mais quand elle te dit "Mets-toi sur le dos, tu courras plus vite", c'est qu'il y a soit une incompréhension quelque part, soit, euh... une incompréhension quelque part Tu crois que ton employeur sait ce que readonly signifie, en C# ? Ca permet de s'assurer qu'une variable ne peut plus être réaffectée, comme le dit StormimOn.

  4. #4
    Membre expérimenté
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Par défaut
    Les incompréhensions c'est fun, ca ajoute du challenge
    C'est pour ça qu'il serait bien savoir la raison de cette contrainte.

    Soit l'employeur ne sait pas à quoi le readonly correspond (ça peut arriver), soit tu as mal compris la demande (ça peut arriver aussi), soit l'employeur est con (ça ne peut absolument pas arriver ).

  5. #5
    Romain Verdier
    Invité(e)
    Par défaut
    La seule raison qui pourrait te pousser à avoir tous tes champs en readonly serait la nécessité de rendre tes objets immutables. C'est un cas courant, mais dans ce cas, les setters ne peuvent pas exister.

    L'autre usage de readonly consiste à qualifier certains champs de ta classe qui sont uniquement initialisés dans les constructeurs, ou par le biais des variables initializers.

    Il n'y a pas de solution à ton problème, même la reflexion ne permet pas de modifier la valeur d'un champ readonly. Je pense même que tu peux sans risque remettre en question ton employeur ; mais assure toi avant d'avoir bien compris ce qu'il voulait...

  6. #6
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Citation Envoyé par Romain Verdier Voir le message
    L'autre usage de readonly consiste à qualifier certains champs de ta classe qui sont uniquement initialisés dans les constructeurs, ou par le biais des variables initializers.
    C'est bien sur un petit détail, mais si on utilise les variables initializers, autant utiliser const plutôt que readonly.

    L'intérêt du readonly (vs const) est d'avoir des initialisations différentes suivant les paramètres des/du constructeur(s).

Discussions similaires

  1. Utiliser des filtres dans un data set
    Par pdiaz dans le forum BIRT
    Réponses: 1
    Dernier message: 27/06/2014, 09h51
  2. Réponses: 5
    Dernier message: 15/04/2005, 14h22

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