Saltar al contenido principal
Publicado el

struct en C#

Compartir:

Introducción

El lenguaje C# es rico en tipos, ofreciendo a los programadores una amplia variedad de herramientas para resolver problemas. Entre estas herramientas se encuentran las estructuras (structs), que son especialmente útiles para representar objetos ligeros que tienen semántica de valor.

¿Qué es una estructura (struct)?

En C#, una struct es un tipo de valor que se utiliza para encapsular pequeñas cantidades de datos relacionados. Debido a su naturaleza de tipo de valor, ocupa directamente un espacio en la memoria, evitando la asignación en el heap, lo que la hace más rápida en ciertas circunstancias en comparación con las clases.

Estructuras vs Clases

Diferencias entre structs y clases:

  1. Tipo de Asignación: Mientras que una struct es un tipo de valor, una clase es un tipo de referencia. Esta diferencia fundamental dicta el comportamiento en diversas operaciones, especialmente en la asignación y el paso de parámetros.
  2. Herencia: Las structs no admiten herencia, excepto la herencia de interfaces.
  3. Constructores: Una struct no puede tener un constructor sin parámetros. Sin embargo, puede tener constructores parametrizados.
  4. Destructores: Las structs no pueden tener destructores. Los destructores se usan en las clases para realizar cualquier limpieza necesaria antes de que el recolector de basura recopile un objeto.
  5. Modificadores de acceso: El modificador protected no tiene sentido en una struct, ya que no admiten herencia.

¿Cuándo usar una struct?

Las structs son ideales en situaciones donde:

  • La instancia es pequeña y tiene semántica de valor.
  • Es deseable evitar asignaciones en el heap.
  • El objeto representa un único valor lógico, como un número o un punto de datos.

Ejemplo Práctico

Aquí hay un ejemplo de una struct en acción:

using System;

namespace Base {
  class Struct {
    public void Run() {
      var estructura = new Estructura();
      estructura.Numero = 200;

      // El número debe ser >= 0 y <= 100.
    }
  }

  struct Estructura : INumero {
    private int numero;

    public int Numero {
      set {
        if (value >= 0 && value <= 100) {
          numero = value;
          ImprimirNumero();
        }
        else
          Console.WriteLine("El número debe ser >= 0 y <= 100.");
      }
    }

    public void ImprimirNumero() {
      Console.WriteLine($"Número: {numero}");
    }
  }

  interface INumero {
    void ImprimirNumero();
  }
}

Conclusión

La elección entre usar una struct o una clase en C# depende de las necesidades específicas de tu proyecto. Esperamos que con este artículo hayas adquirido una comprensión clara de las estructuras y cuándo pueden ser útiles.

Happy coding!