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
Representación de un punto en un plano cartesiano
En este ejemplo, se muestra cómo definir una estructura que representa un punto en un plano cartesiano.
// Definición de la estructura Punto
struct Punto
{
public int X; // Coordenada X del punto
public int Y; // Coordenada Y del punto
// Constructor para inicializar las coordenadas del punto
public Punto(int x, int y)
{
X = x;
Y = y;
}
}
// Uso
Punto punto = new Punto(3, 4); // Crear una instancia de la estructura Punto
Console.WriteLine($"Punto: ({punto.X}, {punto.Y})"); // Imprimir las coordenadas del punto
Representación de un Color RGB
En este ejemplo, se muestra cómo definir una estructura que representa un color en formato RGB.
// Definición de la estructura ColorRGB
struct ColorRGB
{
public byte Rojo; // Componente roja del color
public byte Verde; // Componente verde del color
public byte Azul; // Componente azul del color
// Constructor para inicializar los componentes del color
public ColorRGB(byte rojo, byte verde, byte azul)
{
Rojo = rojo;
Verde = verde;
Azul = azul;
}
}
// Uso
ColorRGB color = new ColorRGB(255, 0, 0); // Crear una instancia de la estructura ColorRGB para el color rojo
Console.WriteLine($"Color RGB: ({color.Rojo}, {color.Verde}, {color.Azul})"); // Imprimir los componentes del color
Representación de una fecha
En este ejemplo, se muestra cómo definir una estructura que representa una fecha.
// Definición de la estructura Fecha
struct Fecha
{
public int Dia; // Día del mes
public int Mes; // Mes del año
public int Año; // Año
// Constructor para inicializar la fecha
public Fecha(int dia, int mes, int año)
{
Dia = dia;
Mes = mes;
Año = año;
}
}
// Uso
Fecha fecha = new Fecha(5, 6, 2023); // Crear una instancia de la estructura Fecha
Console.WriteLine($"Fecha: {fecha.Dia}/{fecha.Mes}/{fecha.Año}"); // Imprimir la fecha
Representación de un rectángulo
En este ejemplo, se muestra cómo definir una estructura que representa un rectángulo.
// Definición de la estructura Rectangulo
struct Rectangulo
{
public int Ancho; // Ancho del rectángulo
public int Alto; // Alto del rectángulo
// Constructor para inicializar el rectángulo
public Rectangulo(int ancho, int alto)
{
Ancho = ancho;
Alto = alto;
}
// Método para calcular el área del rectángulo
public int CalcularArea()
{
return Ancho * Alto;
}
}
// Uso
Rectangulo rectangulo = new Rectangulo(5, 10); // Crear una instancia de la estructura Rectangulo
int area = rectangulo.CalcularArea(); // Calcular el área del rectángulo
Console.WriteLine($"Área del rectángulo: {area}"); // Imprimir el área del rectángulo