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.cs
1234567891011121314151617181920212223242526272829using 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.cs
1234567891011121314151617181920212223242526272829using 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 !
Demandez à l'IA
Demandez à l'IA
Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion
Awesome!
Completion rate improved to 2.04
Accéder Correctement aux Champs dans les Méthodes de Struct
Glissez pour afficher le menu
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.cs
1234567891011121314151617181920212223242526272829using 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.cs
1234567891011121314151617181920212223242526272829using 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 !