Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Accéder Correctement aux Champs dans les Méthodes de Struct | Structures et Énumérateurs
C# au-delà des Bases
course content

Contenu du cours

C# au-delà des Bases

C# au-delà des Bases

1. Structures Supplémentaires et Gestion des Fichiers
2. Structures et Énumérateurs
3. Introduction à la Programmation Orientée Objet (POO)
4. Essentiels de la POO
5. Principes de la POO

book
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 :

cs

index

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 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 à :

cs

index

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

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.

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 ?

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 ?

Sélectionnez la réponse correcte

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 2. Chapitre 6
We're sorry to hear that something went wrong. What happened?
some-alt