Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[débutant] Un champs ou une propriété

2 réponses
Avatar
Steeve
Bonjour,

Ça fait quelques articles que je lis sur le sujet, mais il y a un concept
que je ne comprends pas trop. Pouvez-vous m'aider ?

Quelle est l'avantage d'écrire une propriété dans une class plutôt qu'un
champ ? Il me semble que c'est plus compliqué à écrire (utilisation des mots
clés get et set) Et si c'est si avantageux que ça, pouvez-vous me donner un
exemple concret dans une application asp.net ?

Steeve

2 réponses

Avatar
Paul Bacelar
Exemple: La propriété Enable d'un control.
Le fait d'avoir une propriété permet d'envoyer une notification du
changement de l'état Enable du control à toutes les parties du code qui sont
intéressé par cette valeur.

bool Enable
{
get
{
return enable;
}
set
{
enable = value:
FireEnableChanged();
}
}

Maintenant faite la même chose avec un champ ;-)
--
Paul Bacelar

"Steeve" wrote in message
news:#
Bonjour,

Ça fait quelques articles que je lis sur le sujet, mais il y a un concept
que je ne comprends pas trop. Pouvez-vous m'aider ?

Quelle est l'avantage d'écrire une propriété dans une class plutôt qu'un
champ ? Il me semble que c'est plus compliqué à écrire (utilisation des


mots
clés get et set) Et si c'est si avantageux que ça, pouvez-vous me donner


un
exemple concret dans une application asp.net ?

Steeve




Avatar
Boris Sargos
Salut Steeve,
il y a deux raisosns à cela.
- la première, c'est que cela te donne un contrôle sur l'utilsation
externe de tes champs. Tes champs étant déclarés privés, et tes propriétés
correspondantes déclarées publiques, cela interdit l'accès direct par
l'exterieur à ces champs. Cela te donne donc plus de contrôle et plus de
sécurité sur ta classe. C'est un des principes de l'encapsulation. Tu peux
ensuite écrire soit uniquement un get : ta propriété est en lecture seule,
soit uniquement un set : ta propriété est en écriture seule, soit les deux.
Et c'est très utile.
- la deuxième, c'est que dans les déclarations get et set, tu peux y
ajouter du code. Notamment pour contrôler la valididté de l'argument (pour
un set). Tu peux également y ajouter le déclenchement d'évènements, ce qui
est intéressant dans le cas d'un contrôle. Et enfin, un dernier intérêt : tu
peux modifier ta classe en interne, en conséquence d'une modification sur un
de ses membres (dans le cas d'un set). Voici un exemple d'utilisation dans
le cas d'un set :

Class MyClass {
// Champ Backcolor : couleur d'arrière-plan
private Color m_BackColor = Color.Blue;
// Nom de la couleur d'arrière-plan
private string m_BackColorName = "Couleur : bleu";
// Délégué multicast pour l'évènement BackColorChanged
private event EventHandler m_BackColorChanged;
// Fonction membre chargée de repeindre l'arrière-plan
private void Paint() { ... }

// Définition de la propriété
public Color BackColor {
// Le get ne fait que retourner la couleur de
l'arrière-plan
get { return m_BackColor; }
set {
// Là, tu n'exécutes la suite, que si la valeur de
m_BackColor change
if(value != m_BackColor) {
// Affectation de la nouvelle valeur
m_BackColor = (Color)value;
// Tu modifies la valeur de m_BackColorName en
conséquence
m_BackColorName = "Couleur " + m_BackColor.Name;
// tu lances l'évènement BackColorChanged pour
que les utilisateurs de ta classe soient au courant que sa couleur
d'arrière-plan a changé
if(m_BackColorChanged != null)
m_BackColorChanged(this,new EventArgs());
// Et tu repeins le fond de ta classe
Paint();
}
}

Ce code, comme tu l'as remarqué, rappelle celui des contrôles. Il
montre trois utilisations de set :
- tu ne modifies tes champs que si cela correspond à ce que tu
cherches. On aurait pu également écrire un truc du genre :

set {
if(value.RB != 0)
{ // Je ne suis pas sûr de la
syntaxe ...
// Affectation de la nouvelle valeur
m_BackColor = (Color)value;
etc ...
}

pour s'assurer que l'arrière-plan contiendrait du rouge.

- Le set est le meilleur endroit pour modifier ta classe en
interne. La preuve, tu n'aurais eu aucun moyen de modifier m_BackColorName
autrement que par l'utilisation de ce set.
- Elle te permet de créer un évènement au moment opportun.


Voilà. C'est clair ?
Note que dans une classe extrêmement simple, tu peux te passer des
propriétés. Ce n'est pas une obligation. Mais dans ce cas, utilise un
struct.