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 :

Problème de classe /Propriété Read only [Débutant]


Sujet :

C#

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 20
    Points : 23
    Points
    23
    Par défaut Problème de classe /Propriété Read only
    Bonjour,

    Je cherche a élaborer une classe contenant 5 propriétés dont une read only.

    Les 4 premières propriétés sont des "filtres" servant à l'exécution de la méthode "GetResults". Le but étant que seule cette méthode puisse affecter le contenu de results.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
                public class MaClasse
                {
                    public string Criteria1 { get; set; }
                    public string Criteria2 { get; set; }
                    public DateTime Date1 { get; set; }
                    public DateTime Date2 { get; set; }
                    public readonly List<string> Results { get; set; }
     
                    public void GetResults()
                    {
                        //ICI LE CODE QUI DOIT ALIMENTER RESULTS
                    }
     
                }
    En écrivant mon code comme ceci j'obtiens le message :
    "Le modificateur 'readonly' n'est pas valide pour cet élément".

    Je m'y prends donc mal.
    Pouvez-vous s'il vous plaît m'aider?

    D'avance merci.

  2. #2
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    269
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 269
    Points : 460
    Points
    460
    Par défaut
    Bonjour,

    Le modificateur "readonly" est réserver au attribut. Pour avoir une propriété readonly, il suffit de ne pas mettre de setter.

    Pour ton cas je ferai les choses suivantes:
    1) ne pas mettre de "Setter" sur Results
    2) Renommer GetResults en quelques chose de plus parlant comme ComputeResults
    3) Changer le type "Results" pour une collection readonly comme ReadOnlyCollection<T>

    Ce qui donnerai
    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
                public class MaClasse
                {
                    private readonly List<string> _results = new List<string();
                    private readonly ReadOnlyCollection<string> _resultsReadonly = _results.AsReadOnly();
     
                    public string Criteria1 { get; set; }
                    public string Criteria2 { get; set; }
                    public DateTime Date1 { get; set; }
                    public DateTime Date2 { get; set; }
                    public readonly IList<string> Results { get { return _resultsReadonly; } }
     
                    public void ComputeResults()
                    {
                        //ICI LE CODE QUI DOIT ALIMENTER RESULTS
                    }
     
                }

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    332
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Juin 2002
    Messages : 332
    Points : 502
    Points
    502
    Par défaut
    Ça dépend...

    Si les propriétés Criteria et Date n'ont d'utilité que pour alimenter la requête alors c'est un mauvais design.

    Il vaudrait mieux créer une méthode avec des paramètres. De cette manière, tu te retrouves avec une classe service qui est stateless.

    Sinon, si les propriétés en question sont utilisées dans d'autres contextes, alors l'intervention précédente est à-propos.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2013
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2013
    Messages : 20
    Points : 23
    Points
    23
    Par défaut
    @Antoine, cela fonctionne, j'ai juste dû corriger 2 niveaux d'accesibilité

    - Ajout de static sur _results sinon innacessible pour _resultsReadonly
    - Suppression de readonly sur Results sinon même erreur qu'au début.

    Ce qui donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
                private static List<string> _results = new List<string>();
                private readonly ReadOnlyCollection<string> _resultsReadonly = _results.AsReadOnly();
     
                public string Criteria1 { get; set; }
                public string Criteria2 { get; set; }
                public DateTime Date1 { get; set; }
                public DateTime Date2 { get; set; }
                public IList<string> Results { get { return _resultsReadonly; } }
    @BabyNeedle, il s'agit donc d'un mauvais design. Je vais transformer tout ça en méthode et garder quelque part la façon de procéder d'Antoine, cela me reservira surement.

    Merci beaucoup à vous deux.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/09/2012, 17h35
  2. [WD-97] Problème de read-only
    Par Malorie dans le forum Word
    Réponses: 3
    Dernier message: 06/10/2009, 02h22
  3. Problème requete insert et table en read Only
    Par cilies38 dans le forum Requêtes
    Réponses: 2
    Dernier message: 04/05/2009, 21h51
  4. Problème curseur READ ONLY
    Par yal001 dans le forum Langage SQL
    Réponses: 8
    Dernier message: 03/04/2007, 19h22
  5. [controle] propriété read only
    Par Fizgig dans le forum Composants VCL
    Réponses: 6
    Dernier message: 28/08/2002, 10h30

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