Accesseur et mutateur

orfanik Messages postés 10 Date d'inscription dimanche 16 mai 2010 Statut Membre Dernière intervention 12 juillet 2010 - 16 mai 2010 à 09:16
orfanik Messages postés 10 Date d'inscription dimanche 16 mai 2010 Statut Membre Dernière intervention 12 juillet 2010 - 16 mai 2010 à 20:21
Je sais qu'en POO il est fortement conseillé d'avoir recours à des acceseurs (methodes get_VAR()) et des mutateurs (méthodes set_VAR()), j'ai vus ça en C++ et en Java , seulement voila quand j'ai regardé le tutoriel XNA pour C# le monsieur qui faisait sa video n'avait recours a aucune de ce genre de méthode et utilisait nomObjet.variable pour acceder ou modifier ses variables. C'était pourtant une video officielle du site de Microsoft.

Qu'en est-il reellement en C# ? Est-il plus conseillé d'utiliser ce genre de méthodes ou pas ? Et pourquoi dit-on qu'il est dangereux de ne pas faire en sorte que les variables d'une classe soient private ?
A voir également:

3 réponses

cs_GG29 Messages postés 326 Date d'inscription vendredi 23 décembre 2005 Statut Membre Dernière intervention 8 février 2011 17
16 mai 2010 à 18:23
En c# on utilise les propriétés
exemple
private int _a;
public int A
{
    get { return _a; }
    set { _a = value; }
}


ou à partir de c#3
public int A { get; set; }


---
Généralement le bug se situe entre le clavier et la chaise.
Le temps est une "chose" introuvable dont l'existence ne fait aucun doute.
1
cs_coq Messages postés 6349 Date d'inscription samedi 1 juin 2002 Statut Membre Dernière intervention 2 août 2014 101
16 mai 2010 à 19:12
Bonjour,

"Et pourquoi dit-on qu'il est dangereux de ne pas faire en sorte que les variables d'une classe soient private ?"
Il est déconseillé d'exposer publiquement (dans le sens "accessible à l'extérieur de l'API") un champ qui n'est pas en lecture seule (donc ni const, ni readonly) car on ne dispose alors d'aucune possibilité de vérification de la valeur affectée, et aucun moyen d'être notifié du changement de valeur.
Une fois le champ exposé, il est difficile de le remplacer par une propriété car ce n'est pas forcément anodin pour les consommateurs de l'API.
C'est pourquoi il est en général conseillé de toujours passer par une propriété, et de laisser l'optimiseur de code se débrouiller (durant le JIT) pour que la présence d'un "get" ne faisant que retourner la valeur (ou référence) d'un champ soit éventuellement éléminée par inlining.


/*
coq
MVP Visual C#
CoqBlog
*/
1
orfanik Messages postés 10 Date d'inscription dimanche 16 mai 2010 Statut Membre Dernière intervention 12 juillet 2010 1
16 mai 2010 à 20:21
merci
1
Rejoignez-nous