Précédent   Forum du club des développeurs et IT Pro > Dotnet > Général Dotnet > Débuter
Débuter Forum d'entraide pour bien débuter avec Dotnet
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 24/10/2012, 16h09   #1
jpcheck
Rédacteur/Modérateur
 
Avatar de jpcheck
 
Homme Jean-Philippe ANDRÉ
Développeur freelance
Inscription : juillet 2007
Messages : 8 511
Détails du profil
Informations personnelles :
Nom : Homme Jean-Philippe ANDRÉ
Âge : 29
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur freelance
Secteur : Finance

Informations forums :
Inscription : juillet 2007
Messages : 8 511
Points : 14 808
Points : 14 808
Envoyer un message via MSN à jpcheck
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
jpcheck est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/10/2012, 16h56   #2
mermich
Membre chevronné
 
Homme Etienne Mermillod
Inscription : février 2007
Messages : 442
Détails du profil
Informations personnelles :
Nom : Homme Etienne Mermillod
Âge : 28

Informations forums :
Inscription : février 2007
Messages : 442
Points : 622
Points : 622
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.
mermich est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 24/10/2012, 17h19   #3
h2s84
Modérateur
 
Avatar de h2s84
 
Homme Holty Samba SOW
Développeur .NET
Inscription : mars 2007
Messages : 2 740
Détails du profil
Informations personnelles :
Nom : Homme Holty Samba SOW
Âge : 28
Localisation : Sénégal

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

Informations forums :
Inscription : mars 2007
Messages : 2 740
Points : 5 162
Points : 5 162
Envoyer un message via MSN à h2s84 Envoyer un message via Skype™ à h2s84
Peut-être la lecture de cet article te permettra d'en apprendre un peu plus sur l'utilité des propriétés. Bonne lecture
__________________
Consultant .Net chez SoftFluent
Découvrir notre produit CodeFluent Entities

Adhérer à l'association Fier d'être développeur
Les FAQs sur les technologies .Net voir ici
Les cours et tutos sur les technologies .Net voir ici
Les critiques sur les livres parlant des technologies .Net voir ici
Pensez à la balise [CODE]
Pensez au tag si votre problème est résolu
h2s84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2012, 10h11   #4
tomlev
Rédacteur/Modérateur


 
Avatar de tomlev
 
Homme Thomas Levesque
Développeur .NET
Inscription : février 2004
Messages : 17 770
Détails du profil
Informations personnelles :
Nom : Homme Thomas Levesque
Âge : 31
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 : 17 770
Points : 33 992
Points : 33 992
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.
__________________

Pas de questions techniques par MP ! Le forum est là pour ça...

Tutoriels : Les markup extensions en WPF - La sérialisation XML avec .NET (Aller plus loin) - Une visite guidée de WPF (traduction)
Projet : Dvp.NET, la librairie .NET open-source des membres de Developpez !
tomlev est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2012, 14h08   #5
jpcheck
Rédacteur/Modérateur
 
Avatar de jpcheck
 
Homme Jean-Philippe ANDRÉ
Développeur freelance
Inscription : juillet 2007
Messages : 8 511
Détails du profil
Informations personnelles :
Nom : Homme Jean-Philippe ANDRÉ
Âge : 29
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur freelance
Secteur : Finance

Informations forums :
Inscription : juillet 2007
Messages : 8 511
Points : 14 808
Points : 14 808
Envoyer un message via MSN à jpcheck
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 )
jpcheck est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2012, 14h55   #6
Bluedeep
Expert Confirmé Sénior
 
Homme François
Chef de projet NTIC
Inscription : janvier 2007
Messages : 6 544
Détails du profil
Informations personnelles :
Nom : Homme François
Âge : 52
Localisation : France

Informations professionnelles :
Activité : Chef de projet NTIC

Informations forums :
Inscription : janvier 2007
Messages : 6 544
Points : 13 893
Points : 13 893
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
Bluedeep est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 25/10/2012, 15h16   #7
mermich
Membre chevronné
 
Homme Etienne Mermillod
Inscription : février 2007
Messages : 442
Détails du profil
Informations personnelles :
Nom : Homme Etienne Mermillod
Âge : 28

Informations forums :
Inscription : février 2007
Messages : 442
Points : 622
Points : 622
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 :
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 :
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.
mermich est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2012, 15h53   #8
h2s84
Modérateur
 
Avatar de h2s84
 
Homme Holty Samba SOW
Développeur .NET
Inscription : mars 2007
Messages : 2 740
Détails du profil
Informations personnelles :
Nom : Homme Holty Samba SOW
Âge : 28
Localisation : Sénégal

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

Informations forums :
Inscription : mars 2007
Messages : 2 740
Points : 5 162
Points : 5 162
Envoyer un message via MSN à h2s84 Envoyer un message via Skype™ à h2s84
@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# :
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;
  }
}
__________________
Consultant .Net chez SoftFluent
Découvrir notre produit CodeFluent Entities

Adhérer à l'association Fier d'être développeur
Les FAQs sur les technologies .Net voir ici
Les cours et tutos sur les technologies .Net voir ici
Les critiques sur les livres parlant des technologies .Net voir ici
Pensez à la balise [CODE]
Pensez au tag si votre problème est résolu
h2s84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2012, 15h56   #9
Bluedeep
Expert Confirmé Sénior
 
Homme François
Chef de projet NTIC
Inscription : janvier 2007
Messages : 6 544
Détails du profil
Informations personnelles :
Nom : Homme François
Âge : 52
Localisation : France

Informations professionnelles :
Activité : Chef de projet NTIC

Informations forums :
Inscription : janvier 2007
Messages : 6 544
Points : 13 893
Points : 13 893
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
Bluedeep est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 25/10/2012, 16h08   #10
tomlev
Rédacteur/Modérateur


 
Avatar de tomlev
 
Homme Thomas Levesque
Développeur .NET
Inscription : février 2004
Messages : 17 770
Détails du profil
Informations personnelles :
Nom : Homme Thomas Levesque
Âge : 31
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 : 17 770
Points : 33 992
Points : 33 992
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.
__________________

Pas de questions techniques par MP ! Le forum est là pour ça...

Tutoriels : Les markup extensions en WPF - La sérialisation XML avec .NET (Aller plus loin) - Une visite guidée de WPF (traduction)
Projet : Dvp.NET, la librairie .NET open-source des membres de Developpez !
tomlev est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Vieux 25/10/2012, 16h12   #11
Bluedeep
Expert Confirmé Sénior
 
Homme François
Chef de projet NTIC
Inscription : janvier 2007
Messages : 6 544
Détails du profil
Informations personnelles :
Nom : Homme François
Âge : 52
Localisation : France

Informations professionnelles :
Activité : Chef de projet NTIC

Informations forums :
Inscription : janvier 2007
Messages : 6 544
Points : 13 893
Points : 13 893
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
Bluedeep est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 05h15.


 
 
 
 
Partenaires

Hébergement Web