Je me permet d'apporter une précision.
this est un mot clé qui s'utilise pour faire référence à l'instance actuelle de la classe.
this équivaut donc à "moi-même".
Lorsque tu écris "this.name", cela signifie que l'information est lue (ou stockée dans le cadre d'une affectation) dans un membre "name" situé dans "moi-même" et donc au sein même de la classe. Ce qui implique que tu auras un membre "name" déclaré quelque part dans la classe.
Pour reprendre l'exemple que tu cites :
1 2 3 4 5 6 7 8 9 10 11 12 13
| public class Employee
{
private string alias;
private string name;
public Employee(string name, string alias)
{
// Use this to qualify the members of the class
// instead of the constructor parameters.
this.name = name;
this.alias = alias;
}
} |
est la déclaration du membre "name".
Le mot clé "private" indique que ce membre ne sera pas accessible ailleurs quand dans cette classe.
Le mot clé "string" est le type de ce membre
Et "name" est le nom de ce membre.
public Employee(string name, string alias)
est la déclaration du constructeur de la class.
On retrouve "string name", indiquant que ce constructeur prend un paramètre nommé "name" de type "string"
On se retrouve donc avec un paramètre "name" et un membre privé "name" (donc avec le même nom).
Puisque le paramètre et le membre privé ont le même nom, on ajoute le mot clé "this" (moi-même) pour différencier le membre privé (celui de moi-même) de celui qui est donné en en paramètre (qui vient d'ailleurs).
Cette ligne dit donc, "Place le contenu de la chaine "name" issue de l'extérieur dans la chaîne "name" que je gère moi.
Comme la très bien fait remarqué PixelJuice, on retrouve généralement cette syntaxe particulière dans les constructeur, et si on ne veut pas être obligé d'utiliser "this", il faut nommer le paramètre interne (celui qui est accessible via "this") d'une autre manière et la plupart des développeurs place un undescore devant.
Comme ceci :
1 2 3 4 5 6 7 8 9 10 11
| public class Employee
{
private string _alias;
private string _name;
public Employee(string name, string alias)
{
_name = name;
_alias = alias;
}
} |
Pour ma part, j'ai pris l'habitude de nommer "given", ce qui m'a été transmis par le constructeur.
1 2 3 4 5 6 7 8 9 10 11
| public class Employee
{
private string givenAlias;
private string givenName;
public Employee(string name, string alias)
{
givenName = name;
givenAlias = alias;
}
} |
Mais utiliser, "_name" ou bien "givenName" n'a aucune incidence sur le code.
Il peut cependant arriver que deux personnes ne codent pas de la même façon.
Et dans, ce cas le mieux est d'en discuter et de se tenir à la décision qui sera prise.
Partager