Acesso Correto a Campos em Métodos de Struct
Até agora, métodos foram criados, dados foram passados para eles e utilizados sem problemas, mas considere um exemplo em que o nome do parâmetro do método entra em conflito com o nome de um campo dentro da estrutura:
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(); } }
O compilador não exibe nenhum erro neste caso, porém o programa está logicamente incorreto, pois a saída do programa mostra (0, 0)
mesmo após utilizar setValue(5, 7)
.
Isso ocorre porque a instrução x = x
é muito ambígua, já que tanto o parâmetro do método quanto o campo da struct possuem o nome x
. De acordo com o compilador, na instrução x = x
, o parâmetro do método x
atribui o valor x
a ele mesmo novamente, o que logicamente é uma instrução nula e, portanto, não faz nada.
Para corrigir isso, utiliza-se a palavra-chave this
. A palavra-chave this
informa ao compilador que está se referindo ao campo da struct.
A sintaxe é this.fieldName
. Assim, o código corrigido ficará:
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(); } }
Agora o compilador reconhece que, na instrução x = x
, o x
à esquerda é um campo da struct enquanto o x
à direita é um parâmetro do método, e assim o campo é atualizado corretamente desta vez.
Utiliza-se a palavra-chave this
para resolver qualquer ambiguidade no código. Em geral, é uma boa prática sempre utilizar a palavra-chave this
ao acessar campos em métodos de struct.
Obrigado pelo seu feedback!
Pergunte à IA
Pergunte à IA
Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo
Awesome!
Completion rate improved to 2.04
Acesso Correto a Campos em Métodos de Struct
Deslize para mostrar o menu
Até agora, métodos foram criados, dados foram passados para eles e utilizados sem problemas, mas considere um exemplo em que o nome do parâmetro do método entra em conflito com o nome de um campo dentro da estrutura:
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(); } }
O compilador não exibe nenhum erro neste caso, porém o programa está logicamente incorreto, pois a saída do programa mostra (0, 0)
mesmo após utilizar setValue(5, 7)
.
Isso ocorre porque a instrução x = x
é muito ambígua, já que tanto o parâmetro do método quanto o campo da struct possuem o nome x
. De acordo com o compilador, na instrução x = x
, o parâmetro do método x
atribui o valor x
a ele mesmo novamente, o que logicamente é uma instrução nula e, portanto, não faz nada.
Para corrigir isso, utiliza-se a palavra-chave this
. A palavra-chave this
informa ao compilador que está se referindo ao campo da struct.
A sintaxe é this.fieldName
. Assim, o código corrigido ficará:
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(); } }
Agora o compilador reconhece que, na instrução x = x
, o x
à esquerda é um campo da struct enquanto o x
à direita é um parâmetro do método, e assim o campo é atualizado corretamente desta vez.
Utiliza-se a palavra-chave this
para resolver qualquer ambiguidade no código. Em geral, é uma boa prática sempre utilizar a palavra-chave this
ao acessar campos em métodos de struct.
Obrigado pelo seu feedback!