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 :

Méthode "get" envoyant un objet en lecture seule


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2007
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 42
    Par défaut Méthode "get" envoyant un objet en lecture seule
    bonjour,

    j'aimerais savoir, dans une classe, si je veux retourner un objet (string, list ou autre) en lecture seule comment je dois faire, car si je fais:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    private List<Entree> tab = new List<Entree>();
     
    public List<Entree> getEntree()
            {
                return tab;
            }
    si je procède comme ceci je peux modifier le tableau à partir de l'appel de la méthode getEntree(). Je voudrais évité cela.

    j'ai essayer ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    private List<Entree> tab = new List<Entree>();
     
    public List<Entree> getEntree()
            {
                List<Entree> temp = new List<Entree>();
                foreach(Entree en in tab){
                      temp.add(en);
                }
                return temp;
            }
    mais je me demande s'il n'y a pas plus simple. En c++ par exemple, il suffit de mettre le mot clé "const"

  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
    Les mots clés const et readonly permettent de déclarer un objet qu'on ne pourra pas réassigner. Cela signifie que si on prend un objet un peu évolué (pas un type primitif en gros), tu pourras toujours modifier le contenu de l'objet s'il expose des propriétés ou méthodes le permettant.

    Par exemple si on considère ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private readonly Person person = new Person();
    Il ne sera pas possible de faire
    Ou encore
    Par contre rien n'empêche de faire
    On ne peut pas réassigner l'objet mais on peut le modifier.

    Dans le cas d'une List<T> il est possible d'avoir un wrapper en lecture seule avec la méthode AsReadOnly. Tu ne pourras pas ajouter ou supprimer des éléments à la liste. Par contre les éléments de la liste ne seront pas en lecture seule. Donc il sera possible de modifier les éléments de la liste, même si la liste n'est pas modifiable.

    Ceci ne sera pas possible
    Puisque cela modifie la collection. Par contre
    Fonctionnera. On ne touche pas à la collection mais à un de ses éléments.

    Si la méthode AsReadOnly ne te convient pas et que tu veux que l'ensemble soit en lecture seule deux solutions.

    Tu renvoies une copie complète de la liste afin que ta version interne ne puisse être modifiée, cela suffit en général si ce qui importe c'est de préserver l'état interne.

    Sinon il faut que tu gères un wrapper en lecture seule pour les objets de la collection. Plus lourd à mettre en place pour un gain inexistant je pense.

Discussions similaires

  1. [Access 2003]- erreur 3027 : base ou objet en lecture seule
    Par metallica_fr dans le forum Access
    Réponses: 5
    Dernier message: 15/12/2006, 17h36
  2. Mise à jour impossible, objet en lecture seule
    Par Pitou5464 dans le forum Access
    Réponses: 3
    Dernier message: 12/09/2006, 18h26
  3. Base de Données ou objet en lecture seule?
    Par ben_skywalker dans le forum Access
    Réponses: 6
    Dernier message: 01/06/2006, 08h47

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