Contenu du cours
C# au-delà des Bases
C# au-delà des Bases
Accéder Correctement aux Champs dans les Méthodes de Struct
Jusqu'à présent, nous avons créé des méthodes, passé des données dans celles-ci et les avons utilisées sans problème, mais considérons un exemple où le nom du paramètre de la méthode entre en conflit avec le nom d'un champ à l'intérieur de la structure :
index
using System; struct Coordinate { public int x; public int y; public void setValue(int x, int y) { x = x; y = y; } public void displayValue() { Console.WriteLine($"({x}, {y})"); } } class ConsoleApp { static void Main(string[] args) { Coordinate coord = new Coordinate(); coord.setValue(5, 7); coord.displayValue(); } }
Le compilateur ne montre aucune erreur dans ce cas, cependant le programme est logiquement incorrect car la sortie du programme affiche (0, 0)
même si nous avons utilisé setValue(5, 7)
.
C'est parce que l'instruction x = x
est très ambiguë car à la fois le paramètre de la méthode et le champ de la structure portent le nom x
. Selon le compilateur, dans l'instruction x = x
, le paramètre de la méthode x
assigne la valeur x
à lui-même à nouveau, ce qui est logiquement une instruction nulle et donc ne fait rien.
Pour corriger cela, nous utilisons le mot-clé this
. Le mot-clé this
indique au compilateur que nous faisons référence au champ de la structure.
La syntaxe est this.fieldName
. Ainsi, le code corrigé ressemblera à :
index
using System; struct Coordinate { public int x; public int y; public void setValue(int x, int y) { this.x = x; this.y = y; } public void displayValue() { Console.WriteLine($"({x}, {y})"); } } class ConsoleApp { static void Main(string[] args) { Coordinate coord = new Coordinate(); coord.setValue(5, 7); coord.displayValue(); } }
Maintenant, le compilateur sait que dans l'instruction x = x
, le x
du côté gauche est un champ de structure tandis que x
du côté droit est un paramètre de méthode, et donc le champ est mis à jour avec succès cette fois.
Nous utilisons le mot-clé this
pour résoudre toute ambiguïté dans le code. Il est généralement une bonne pratique d'utiliser toujours le mot-clé this
lors de l'accès aux champs dans les méthodes de structure.
Merci pour vos commentaires !