Accès Correct aux Champs dans les Méthodes de Structure
Jusqu'à présent, vous avez créé des méthodes, passé des données à celles-ci et les avez utilisées sans problème, mais considérez 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 n'affiche aucune erreur dans ce cas, cependant le programme est logiquement incorrect car la sortie du programme affiche (0, 0)
même si vous avez utilisé setValue(5, 7)
.
Cela s'explique par le fait que l'instruction x = x
est très ambiguë puisque à 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, ce qui est logiquement une instruction nulle et donc n'a aucun effet.
Pour corriger cela, vous utilisez le mot-clé this
. Le mot-clé this
indique au compilateur que vous faites 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(); } }
À présent, le compilateur sait que dans l’instruction x = x
, le x
à gauche est un champ de structure tandis que le x
à droite est un paramètre de méthode ; ainsi, le champ est correctement mis à jour cette fois-ci.
Le mot-clé this
est utilisé pour résoudre toute ambiguïté dans le code. Il est généralement recommandé d’utiliser systématiquement 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
Can you show me an example of how to use the `this` keyword in a struct method?
Why is it important to use the `this` keyword in such cases?
Are there any other scenarios where the `this` keyword is necessary?
Awesome!
Completion rate improved to 2.04
Accès Correct aux Champs dans les Méthodes de Structure
Glissez pour afficher le menu
Jusqu'à présent, vous avez créé des méthodes, passé des données à celles-ci et les avez utilisées sans problème, mais considérez 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 n'affiche aucune erreur dans ce cas, cependant le programme est logiquement incorrect car la sortie du programme affiche (0, 0)
même si vous avez utilisé setValue(5, 7)
.
Cela s'explique par le fait que l'instruction x = x
est très ambiguë puisque à 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, ce qui est logiquement une instruction nulle et donc n'a aucun effet.
Pour corriger cela, vous utilisez le mot-clé this
. Le mot-clé this
indique au compilateur que vous faites 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(); } }
À présent, le compilateur sait que dans l’instruction x = x
, le x
à gauche est un champ de structure tandis que le x
à droite est un paramètre de méthode ; ainsi, le champ est correctement mis à jour cette fois-ci.
Le mot-clé this
est utilisé pour résoudre toute ambiguïté dans le code. Il est généralement recommandé d’utiliser systématiquement le mot-clé this
lors de l’accès aux champs dans les méthodes de structure.
Merci pour vos commentaires !