Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Impara Accesso Corretto ai Campi nei Metodi delle Struct | Struct e Enumeratori
C# Oltre le Basi

bookAccesso Corretto ai Campi nei Metodi delle Struct

Finora hai creato metodi, passato dati al loro interno e li hai utilizzati senza problemi, ma considera un esempio in cui il nome del parametro del metodo entra in conflitto con il nome di un campo all'interno della struttura:

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

Il compilatore non mostra alcun errore in questo caso, tuttavia il programma è logicamente errato poiché l'output del programma mostra (0, 0) anche se hai utilizzato setValue(5, 7).

Questo accade perché l'istruzione x = x è molto ambigua, dato che sia il parametro del metodo sia il campo della struct hanno il nome x. Secondo il compilatore, nell'istruzione x = x il parametro del metodo x assegna il valore x a se stesso nuovamente, il che logicamente è un'istruzione nulla e quindi non produce alcun effetto.

Per risolvere questo problema si utilizza la parola chiave this. La parola chiave this indica al compilatore che ci si sta riferendo al campo della struct.

La sintassi è this.fieldName. Quindi il codice corretto sarà:

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

Ora il compilatore riconosce che nell'istruzione x = x, la x a sinistra è un campo della struct mentre la x a destra è un parametro del metodo, e quindi il campo viene aggiornato correttamente questa volta.

Si utilizza la parola chiave this per risolvere qualsiasi ambiguità nel codice. In generale, è una buona pratica utilizzare sempre la parola chiave this quando si accede ai campi nei metodi delle struct.

question mark

Quale parola chiave viene utilizzata per eliminare l'ambiguità quando si fa riferimento ai campi all'interno dei metodi di una classe?

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 2. Capitolo 6

Chieda ad AI

expand

Chieda ad AI

ChatGPT

Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione

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

bookAccesso Corretto ai Campi nei Metodi delle Struct

Scorri per mostrare il menu

Finora hai creato metodi, passato dati al loro interno e li hai utilizzati senza problemi, ma considera un esempio in cui il nome del parametro del metodo entra in conflitto con il nome di un campo all'interno della struttura:

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

Il compilatore non mostra alcun errore in questo caso, tuttavia il programma è logicamente errato poiché l'output del programma mostra (0, 0) anche se hai utilizzato setValue(5, 7).

Questo accade perché l'istruzione x = x è molto ambigua, dato che sia il parametro del metodo sia il campo della struct hanno il nome x. Secondo il compilatore, nell'istruzione x = x il parametro del metodo x assegna il valore x a se stesso nuovamente, il che logicamente è un'istruzione nulla e quindi non produce alcun effetto.

Per risolvere questo problema si utilizza la parola chiave this. La parola chiave this indica al compilatore che ci si sta riferendo al campo della struct.

La sintassi è this.fieldName. Quindi il codice corretto sarà:

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

Ora il compilatore riconosce che nell'istruzione x = x, la x a sinistra è un campo della struct mentre la x a destra è un parametro del metodo, e quindi il campo viene aggiornato correttamente questa volta.

Si utilizza la parola chiave this per risolvere qualsiasi ambiguità nel codice. In generale, è una buona pratica utilizzare sempre la parola chiave this quando si accede ai campi nei metodi delle struct.

question mark

Quale parola chiave viene utilizzata per eliminare l'ambiguità quando si fa riferimento ai campi all'interno dei metodi di una classe?

Select the correct answer

Tutto è chiaro?

Come possiamo migliorarlo?

Grazie per i tuoi commenti!

Sezione 2. Capitolo 6
some-alt