Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Acceso Correcto a Campos en Métodos de Struct | Structs y Enumeradores
C# Más Allá de lo Básico

bookAcceso Correcto a Campos en Métodos de Struct

Hasta ahora, se han creado métodos, se han pasado datos a ellos y se han utilizado sin inconvenientes, pero considere un ejemplo donde el nombre del parámetro del método entra en conflicto con el nombre de un campo dentro de la estructura:

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

El compilador no muestra ningún error en este caso; sin embargo, el programa es lógicamente incorrecto, ya que la salida del programa muestra (0, 0) aunque se haya utilizado setValue(5, 7).

Esto se debe a que la instrucción x = x es muy ambigua, ya que tanto el parámetro del método como el campo de la estructura tienen el nombre x. Según el compilador, en la instrucción x = x, el parámetro del método x asigna el valor x a sí mismo nuevamente, lo cual es lógicamente una instrucción nula y, por lo tanto, no realiza ninguna acción.

Para corregir esto, se utiliza la palabra clave this. La palabra clave this indica al compilador que se está haciendo referencia al campo de la estructura.

La sintaxis es this.fieldName. Así, el código corregido se verá de la siguiente manera:

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

Ahora el compilador sabe que en la instrucción x = x, el x del lado izquierdo es un campo de struct mientras que el x del lado derecho es un parámetro del método, y por lo tanto el campo se actualiza correctamente esta vez.

Se utiliza la palabra clave this para resolver cualquier ambigüedad en el código. Generalmente, es una buena práctica usar siempre la palabra clave this al acceder a campos en métodos de structs.

question mark

¿Qué palabra clave se utiliza para eliminar la ambigüedad al referenciar campos dentro de métodos de clase?

Select the correct answer

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 2. Capítulo 6

Pregunte a AI

expand

Pregunte a AI

ChatGPT

Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla

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

bookAcceso Correcto a Campos en Métodos de Struct

Desliza para mostrar el menú

Hasta ahora, se han creado métodos, se han pasado datos a ellos y se han utilizado sin inconvenientes, pero considere un ejemplo donde el nombre del parámetro del método entra en conflicto con el nombre de un campo dentro de la estructura:

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

El compilador no muestra ningún error en este caso; sin embargo, el programa es lógicamente incorrecto, ya que la salida del programa muestra (0, 0) aunque se haya utilizado setValue(5, 7).

Esto se debe a que la instrucción x = x es muy ambigua, ya que tanto el parámetro del método como el campo de la estructura tienen el nombre x. Según el compilador, en la instrucción x = x, el parámetro del método x asigna el valor x a sí mismo nuevamente, lo cual es lógicamente una instrucción nula y, por lo tanto, no realiza ninguna acción.

Para corregir esto, se utiliza la palabra clave this. La palabra clave this indica al compilador que se está haciendo referencia al campo de la estructura.

La sintaxis es this.fieldName. Así, el código corregido se verá de la siguiente manera:

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

Ahora el compilador sabe que en la instrucción x = x, el x del lado izquierdo es un campo de struct mientras que el x del lado derecho es un parámetro del método, y por lo tanto el campo se actualiza correctamente esta vez.

Se utiliza la palabra clave this para resolver cualquier ambigüedad en el código. Generalmente, es una buena práctica usar siempre la palabra clave this al acceder a campos en métodos de structs.

question mark

¿Qué palabra clave se utiliza para eliminar la ambigüedad al referenciar campos dentro de métodos de clase?

Select the correct answer

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 2. Capítulo 6
some-alt