1. #1
    Rédacteur/Modérateur
    Avatar de Jean-Philippe André
    Homme Profil pro
    Consultant technique et formateur en recherche active pour le Canada
    Inscrit en
    juillet 2007
    Messages
    10 623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Consultant technique et formateur en recherche active pour le Canada
    Secteur : Finance

    Informations forums :
    Inscription : juillet 2007
    Messages : 10 623
    Points : 23 188
    Points
    23 188

    Par défaut Property ou Function ?

    Hello,

    j'utilise un certain nombre de classes qui ont des propriétés (Readonly) de portée Public.

    Je me pose la question de savoir si
    - les Property d'une classe sont générées dès la création d'une instance ou pas ?
    - l'utilisation de Function au lieu de ReadOnly Property est une optimisation du code ou pas ?

    Merci d'avance
    Pas de question technique par MP, je ne réponds pas

    Apprendre à programmer avec Access 2016

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    février 2007
    Messages
    756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : février 2007
    Messages : 756
    Points : 1 322
    Points
    1 322

    Par défaut

    Salut,

    Les propriétés sont des encapsulations de champs privés avec deux méthodes Get_NomPropriété et Set_NomPropriété.

    C'est généré lors de la compilation.


    Bref, cela ne sert à rien de se battre dessus jp.

  3. #3
    Invité
    Invité(e)

    Par défaut

    Peut-être la lecture de cet article te permettra d'en apprendre un peu plus sur l'utilité des propriétés. Bonne lecture

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    février 2004
    Messages
    19 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : février 2004
    Messages : 19 784
    Points : 40 083
    Points
    40 083

    Par défaut

    Citation Envoyé par jpcheck Voir le message
    - les Property d'une classe sont générées dès la création d'une instance ou pas ?
    Ca n'a pas vraiment de sens... une propriété est juste une paire de méthodes (voire une seule méthode pour une propriété ReadOnly), elle est générée à la compilation. Le fait de créer une instance ne "génère" pas de propriété.

    Citation Envoyé par jpcheck Voir le message
    - l'utilisation de Function au lieu de ReadOnly Property est une optimisation du code ou pas ?
    Non, ça ne change rien en termes de performances. Un appel à une propriété est un appel de méthodes. D'ailleurs si tu regardes le code IL généré, tu verras que quand tu récupères la valeur d'une propriété Toto, ça appelle en fait une méthode (cachée) get_Toto.

    D'une manière générale, choisis une propriété si la récupération de la valeur est peu couteuse et n'a pas d'effet de bord. Si la valeur doit être calculée par un traitement complexe, il vaut mieux utiliser une fonction.

  5. #5
    Rédacteur/Modérateur
    Avatar de Jean-Philippe André
    Homme Profil pro
    Consultant technique et formateur en recherche active pour le Canada
    Inscrit en
    juillet 2007
    Messages
    10 623
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Consultant technique et formateur en recherche active pour le Canada
    Secteur : Finance

    Informations forums :
    Inscription : juillet 2007
    Messages : 10 623
    Points : 23 188
    Points
    23 188

    Par défaut

    OK,

    et donc dans le cas où le retour est une list de classes, mieux vaut faire appel à une fonction donc ?

    Merci pour la lecture (mermich )
    Pas de question technique par MP, je ne réponds pas

    Apprendre à programmer avec Access 2016

    Pensez à consulter la FAQ Excel et la FAQ Access

    Derniers tutos
    Excel et les paramètres régionaux
    Les fichiers Excel binaires : xlsb,

    Autres tutos

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

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : janvier 2007
    Messages : 6 605
    Points : 13 192
    Points
    13 192

    Par défaut

    Citation Envoyé par jpcheck Voir le message
    et donc dans le cas où le retour est une list de classes, mieux vaut faire appel à une fonction donc ?
    "Ca dépend"

    De manière générale, je considère qu'il y un cas où le choix doit faire pencher la balance de manière absolue : une propriété doit être idempotente en lecture; dit autrement, la lecture n fois de ta propriété ne doit pas changer l'état du système.

    Si c'est le cas, il est aberrant d'un point de vue conceptuel d'utiliser une propriété. (même si techniquement rien ne s'y oppose).

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  7. #7
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    février 2007
    Messages
    756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : février 2007
    Messages : 756
    Points : 1 322
    Points
    1 322

    Par défaut

    Pour le coup j'ai l'exemple ou le getter d'une propriété faisait de nombreux accès à la base de données...

    Dans ton cas je ferai une méthode à part plutôt qu'une liste car tu semble faire du traitement lors de la construction de la liste.

    De plus, on a vite fait d'essayer de modifier une liste directement avec des .add, même si la propriété est en readonly:


    Imaginons:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    public List<int> Plop
    {
      get
      {
          return new List<int>();
      }
    }
    Même si la propriété est en readonly (il n'y a pas de setter) tu pourra faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    MonInstance.Plop.Add(3);
    Et je peux te garantir que lorsque le voisin verra ce code pour la première fois il comprendra pas/rigolera/fera les gros yeux.

  8. #8
    Invité
    Invité(e)

    Par défaut

    @mermich,
    C'est cool ton exemple. Sauf que le hic (un peu hors sujet ) est que ta propriété Plop renverra toujours une liste avec zéro élément quoi.
    Il faut faire comme ça :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    private List<int> list = null;
    public List<int> Plop
    {
      get
      {
          if(this.list == null) this.list = new List<int>();
          return list;
      }
    }

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

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : janvier 2007
    Messages : 6 605
    Points : 13 192
    Points
    13 192

    Par défaut

    Citation Envoyé par mermich Voir le message
    De plus, on a vite fait d'essayer de modifier une liste directement avec des .add, même si la propriété est en readonly:
    .
    La logique dans ce cas veut qu'on expose des ReadOnlyCollection (méthode "AsReadOnly"), ou éventuellement des listes en readonly (obtenue par héritage de List<T> et overwrite des méthodes "Add" pour lever une exception).

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

  10. #10
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    février 2004
    Messages
    19 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : février 2004
    Messages : 19 784
    Points : 40 083
    Points
    40 083

    Par défaut

    Citation Envoyé par Bluedeep Voir le message
    ou éventuellement des listes en readonly (obtenue par héritage de List<T> et overwrite des méthodes "Add" pour lever une exception).
    Sauf que les méthodes de List<T> ne sont pas virtuelles
    Mais de toutes façons ReadOnlyCollection<T> fait déjà à peu près ça : elle implémente IList<T> mais les méthodes qui modifient la liste déclenchent une exception.

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

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : janvier 2007
    Messages : 6 605
    Points : 13 192
    Points
    13 192

    Par défaut

    Citation Envoyé par tomlev Voir le message
    Sauf que les méthodes de List<T> ne sont pas virtuelles
    Damned ....

    Je ne réponds pas aux questions techniques par MP ! Le forum est là pour ça...


    Une réponse vous a aidé ? utiliser le bouton

    "L’ennui dans ce monde, c’est que les idiots sont sûrs d’eux et les gens sensés pleins de doutes". B. Russel

Discussions similaires

  1. [POSTGRESQL] exec function
    Par peuh dans le forum Requêtes
    Réponses: 5
    Dernier message: 23/05/2003, 16h15
  2. Réponses: 8
    Dernier message: 11/04/2003, 18h41
  3. A propos des 'File management Functions' de Windows
    Par znaidi dans le forum Windows
    Réponses: 3
    Dernier message: 01/04/2003, 17h01
  4. [postgreSQL] équivalent de la function 'instr'
    Par Dra_Gun dans le forum Requêtes
    Réponses: 2
    Dernier message: 17/01/2003, 17h09
  5. [Dev c++ 4] implicite declaration of function "int kbhi
    Par Torpedox dans le forum Dev-C++
    Réponses: 5
    Dernier message: 01/01/2003, 14h37

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