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 :

Comment peut-on empécher l'utilisation des méthodes (Add, clear, etc.) sur un getter de List


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de touftouf57
    Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Moselle (Lorraine)

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

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Par défaut Comment peut-on empécher l'utilisation des méthodes (Add, clear, etc.) sur un getter de List
    Bonjour à tous,

    Je suis en train de me demander, s'il est possible d'empêcher l'utilisation des méthodes de List (Add, Clear,...) sur un getter de List. En fait, je veux obliger le développeur qui reprendra ma classe de faire n'importe quoi, et l'obliger à utiliser les méthodes (Add, Clear,..) que ma classe expose.

    Cela existe en C++, avec l'utilisation du mot clé "const", mais je n'ai plus la syntaxe exacte.

    C'est une question qui intéresse toute l'équipe.

    Merci, du coup de main

  2. #2
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    Il nous manque des informations. Quelle est ta classe que tu exposes ? C'est une classe qui hérite de List ??? Un morceau de code serait le bienvenue..

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

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

    Informations forums :
    Inscription : Décembre 2007
    Messages : 362
    Par défaut
    Oupss, j'ai oublié de préciser.
    Ma classe possède une donnée membre LaList.
    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
    public class MaClasse {
     
    private List<AutreClasse> _laList= null;
    .....
     
    public void Add(AutreClasse autre){
         this._laList.add(autre);
         FaitAutreTraitement();
    }
     
    public List<AutreClasse> LaList{
          get{
               return _laList;
          }
    }
    Moi, je voudrais empêcher l'utilisateur de la classe de faire ce genre de code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maClasse.LaList.Add(new AutreClasse(....));
    Pour le forcer à utiliser:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maClasse.Add(new AutreClasse(....));
    Une idée?

  4. #4
    Membre émérite Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 822
    Par défaut
    tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public List<AutreClasse> LaList
    {
          get
          {
               return _laList.AsReadOnly();
          }
    }
    la solution était dans les membres d'une liste sur msdn

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

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

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

    Je vais voir ce que cela donne. Nous on cherchait plutôt des mots clefs, au lieu de regarder les méthodes disponibles des collections.

    Merci beaucoup.


    Je viens de tester. Il y a un problème, que j'ai corrigé
    Il faut modifier le type de retour de la méthode. Le retour sera IList<AutreClasse> au lieu de List<AutreClasse>

    Encore merci

  6. #6
    Membre émérite Avatar de kheironn
    Homme Profil pro
    Chef de projets technique C# / MVC / .Net
    Inscrit en
    Février 2007
    Messages
    822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Chef de projets technique C# / MVC / .Net
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2007
    Messages : 822
    Par défaut
    Il faut toujours regarder les membres de la classe...
    On y trouve plein de choses qu'on ne soupçonnait pas... il m'est arrivé de coder une méthode et de me rendre compte après coup qu'un objet m'offrait le service en question ! Maintenant, j'examine les membres !

    en ce qui concerne ton cas, je faisais une méthode qui renvoyait une nouvele instance de List<T>, l'utilisateur la manipulait, mais celà ne changeait pas la liste originale... puis j'ai trouvé cette méthode et Hop !

  7. #7
    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 touftouf57 Voir le message
    Le retour sera IList<AutreClasse> au lieu de List<AutreClasse>

    Encore merci
    En effet, AsReadOnly retourne en réalité une instance de ReadOnlyCollection<T> , qui implémente IList<T>

  8. #8
    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 touftouf57 Voir le message
    Merci,

    Je vais voir ce que cela donne. Nous on cherchait plutôt des mots clefs,
    Le nombre de mot clef en C# est assez limité. (Presque) tout se passe avec le framework.

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

Discussions similaires

  1. Comment utiliser des méthodes d'un jar dans une JSP ?
    Par utopman dans le forum Servlets/JSP
    Réponses: 9
    Dernier message: 26/06/2012, 22h01
  2. [AC-2003] Comment empêcher l'utilisation des touches F1 à F16 dans un état
    Par electrosat03 dans le forum IHM
    Réponses: 10
    Dernier message: 07/07/2009, 17h37
  3. Réponses: 20
    Dernier message: 22/05/2007, 17h52
  4. Réponses: 2
    Dernier message: 22/08/2006, 20h57
  5. Réponses: 1
    Dernier message: 09/03/2006, 18h15

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