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 :

Données membre obligatoirement définies dans le constructeur


Sujet :

C#

  1. #1
    Membre habitué Avatar de touftouf57
    Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Moselle (Lorraine)

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

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Points : 174
    Points
    174
    Par défaut Données membre obligatoirement définies dans le constructeur
    Bonjour à vous,

    Il me semble avoir déjà été "confronté" à une erreur de compilation car j'avais défini une données membre de telle façon que j'étais obligé de la définir dans le constructeur.

    Maintenant je ne sais plus du tout dans quel langage cela m'était arrivé, ni de la signature de la définition.

    Il me semblait que c'était quelquechose approchant de cela.
    private readonly MaClasse _maclasse;


    J'en ai discuté avec un collègue et lui me dit que cela n'existe pas.

    Qui a raison, lui ou moi?


    Merci d'avance

  2. #2
    Membre émérite Avatar de meziantou
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2010
    Messages
    1 223
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2010
    Messages : 1 223
    Points : 2 439
    Points
    2 439
    Par défaut
    le mot clé readonly indique que la valeur doit être définie dans le constructeur et ne peut plus être modifiée par la suite

    http://msdn.microsoft.com/en-us/libr...v=vs.110).aspx

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Il y a un cas de figure dans lequel cela se présente en C#, et même en .NET d'une manière générale: les structures.

    Si tu fais une structure et que tu veux faire un constructeur de la structure, tu ne peux pas faire un constructeur sans paramètre car le compilateur se le réserve pour lui. De plus, dans ce constructeur tu es obligé d'initialiser toutes tes variables membres sinon le compilateur râle.

    Donc si tu fais en plus une variable membre en readonly, dans le contexte d'une structure, tu es obligé de l'initialiser dans le constructeur que tu vas définir, sinon il ne pourra pas prendre d'autres valeurs que la valeur par défaut.

    Par contre, si c'est un readonly dans une classe, tu peux toujours faire quelquechose comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private readonly MaClasse _maclasse = new MaClasse();
    que tu ne pourras pas faire pour une structure.

  4. #4
    Membre habitué Avatar de touftouf57
    Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Moselle (Lorraine)

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

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Points : 174
    Points
    174
    Par défaut
    Merci,

    Je ne disais pas n'importe quoi avec le readonly donc.

    Mais, il n'existe aucune signature de données membre qui fait que le compilateur plante si dans le constructeur, il n'y a pas une affectation sur ladite donnée membre?

    du style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    private readonly {mot clé magique recherché} Object _maDonnee;
     
    public MaClasse(Object donnee)
    {
    }
    Avec une erreur:
    Problème de compilation, _maDonnee n'est pas définie dans le constructeur de MaClasse.

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par touftouf57 Voir le message
    Merci,

    Je ne disais pas n'importe quoi avec le readonly donc.

    Mais, il n'existe aucune signature de données membre qui fait que le compilateur plante si dans le constructeur, il n'y a pas une affectation sur ladite donnée membre?

    du style:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    private readonly {mot clé magique recherché} Object _maDonnee;
     
    public MaClasse(Object donnee)
    {
    }
    Avec une erreur:
    Problème de compilation, _maDonnee n'est pas définie dans le constructeur de MaClasse.
    A ma connaissance, il n'existe pas de "mot clé magique" en .NET qui va faire une erreur de compilation dans ce contexte, même dans le cas d'une classe. Par contre, dans le meilleur des cas, tu auras quand même un avertissement.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 17/04/2008, 13h22
  2. Utilisation d'un membre static dans le constructeur
    Par samitriani dans le forum C++
    Réponses: 3
    Dernier message: 10/03/2008, 18h12
  3. Réponses: 1
    Dernier message: 26/09/2007, 17h16
  4. [MySQL] Information membre non inscrite dans la base de donnée
    Par Margouillat974 dans le forum PHP & Base de données
    Réponses: 11
    Dernier message: 28/09/2006, 19h21
  5. Réponses: 3
    Dernier message: 24/04/2005, 14h19

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