Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprenda Acesso Correto a Campos em Métodos de Struct | Structs e Enumeradores
C# Além do Básico

bookAcesso 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

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

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

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

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.

question mark

Qual palavra-chave é utilizada para eliminar ambiguidade ao referenciar campos dentro de métodos de classe?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 2. Capítulo 6

Pergunte à IA

expand

Pergunte à IA

ChatGPT

Pergunte o que quiser ou experimente uma das perguntas sugeridas para iniciar nosso bate-papo

Awesome!

Completion rate improved to 2.04

bookAcesso 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

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

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

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

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.

question mark

Qual palavra-chave é utilizada para eliminar ambiguidade ao referenciar campos dentro de métodos de classe?

Select the correct answer

Tudo estava claro?

Como podemos melhorá-lo?

Obrigado pelo seu feedback!

Seção 2. Capítulo 6
some-alt