Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Accès Correct aux Champs dans les Méthodes de Structure | Structures et Énumérateurs
C# Au-Delà des Bases

bookAccè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

index.cs

copy
1234567891011121314151617181920212223242526272829
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 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

index.cs

copy
1234567891011121314151617181920212223242526272829
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(); } }

À 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.

question mark

Quel mot-clé est utilisé pour éliminer l’ambiguïté lors de la référence aux champs à l’intérieur des méthodes de classe ?

Select the correct answer

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 2. Chapitre 6

Demandez à l'IA

expand

Demandez à l'IA

ChatGPT

Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion

Suggested prompts:

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

bookAccè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

index.cs

copy
1234567891011121314151617181920212223242526272829
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 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

index.cs

copy
1234567891011121314151617181920212223242526272829
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(); } }

À 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.

question mark

Quel mot-clé est utilisé pour éliminer l’ambiguïté lors de la référence aux champs à l’intérieur des méthodes de classe ?

Select the correct answer

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 2. Chapitre 6
some-alt