csharp-structs

Qué son y cómo usar structs en C#

Una struct en C# es una estructura de datos que representa un conjunto de variables que se agrupan bajo un solo nombre.

Los structs son especialmente útiles cuando se trabaja con tipos de datos simples que tienen un tamaño predecible y se utilizan principalmente para representar datos de valor.

Las estructuras son de tipo valor, lo que significa que pueden ser almacenas directamente en la pila de memoria (no en el heap como las clases)

Sintaxis de las structs

La sintaxis básica para definir una estructura en C# es la siguiente:

struct NombreDeLaEstructura
{
    // Definición de campos
    public TipoDeDato Campo1;
    public TipoDeDato Campo2;

    // Definición de métodos, propiedades, etc.
}
  • NombreDeLaEstructura: Es el nombre único que se le da a la estructura.
  • TipoDeDato: Especifica el tipo de datos de los campos dentro de la estructura.

Ejemplo básico

A continuación, se muestra un ejemplo básico de cómo definir y utilizar una estructura en C#:

struct Punto
{
    public int X;
    public int Y;

    public Punto(int x, int y)
    {
        X = x;
        Y = y;
    }

    public void ImprimirCoordenadas()
    {
        Console.WriteLine($"Coordenadas: ({X}, {Y})");
    }
}

// uso
Punto punto = new Punto(3, 5);
punto.ImprimirCoordenadas();

Uso de structs

Declaración e inicialización

Las estructuras se declaran e inicializan de manera similar a las variables de otros tipos de datos.

Punto punto;
punto.X = 3;
punto.Y = 5;

También se pueden inicializar si disponen de un constructor definido.

Punto punto = new Punto(3, 5);

Acceso a campos

Los campos de una estructura se acceden utilizando la notación de punto (.).

int x = punto.X;

Pasaje por valor

Cuando se pasa una estructura como argumento a un método o se asigna a otra variable, se pasa una copia del valor de la estructura en lugar de una referencia.

Por ejemplo, supongamos el siguiente caso,

Punto punto1 = new Punto(3, 5);
Punto punto2 = punto1; // Se copia el valor de punto1 en punto2

punto2.y = 10;
// ahora punto1.y vale 5, y punto2.y vale 10;

Si Punto fuera una clase en lugar de una struct, tanto punto1.y habría cambiado a 10. Esto es así porque en C# las struct son de tipo valor, y las clases son de tipo referencia.

Ejemplos prácticos